继承多态重载与接口PPT学习教案_第1页
继承多态重载与接口PPT学习教案_第2页
继承多态重载与接口PPT学习教案_第3页
继承多态重载与接口PPT学习教案_第4页
继承多态重载与接口PPT学习教案_第5页
已阅读5页,还剩170页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、会计学1 继承多态重载与接口继承多态重载与接口 2 第1页/共175页 3 n每一个子类则是父类的特殊化,是对公共域和 方法在功能、内涵方面的扩展和延伸 Java的继承 的继承 第2页/共175页 4 各种电话卡类及其间的继承关系 Java的继承 的继承 第3页/共175页 5 Java的继承 的继承 第4页/共175页 6 n 地继承java.lang.Object得到的 n新定义的类称为子类,它可以从父类那里 继承所有非private的属性和方法作为自己的 成员 Java的继承 的继承 第5页/共175页 7 Java的继承 的继承 第6页/共175页 8 1: abstract clas

2、s PhoneCard 2: 3: double balance; 4: 5: abstract boolean performDial( ); 6: double getBalance( ) 7: 8: return balance; 9: 10: 11: abstract class None-Number-PhoneCard extends PhoneCard 12: 13: String phoneSetType; 14: 15: String getSetType( ) 16: Java的继承 的继承 第7页/共175页 9 17: return phoneSetType; 18:

3、19: 20: abstract class Number-PhoneCard extends PhoneCard 21: 22: long cardNumber; 23: int password; 24: String connectNumber; 25: boolean connected; 26: 27: boolean performConnection(long cn,int pw) 28: 29: if(cn = cardNumber 32: return true; Java的继承 的继承 第8页/共175页 10 33: 34: else 35: return false;

4、36: 37: 38: class magCard extends None-Number-PhoneCard 39: 40: String usefulArea; 41: 42: boolean performDial( ) 43: 44: if( balance 0.9) 45: 46: balance -= 0.9; 47: return true; 48: Java的继承 的继承 第9页/共175页 11 49: else 50: return false; 51: 52: 53: class IC-Card extends None-Number-PhoneCard 54: 55:

5、boolean performDial( ) 56: 57: if( balance 0.5) 58: 59: balance -= 0.9; 60: return true; 61: 62: else 63: return false; 64: 65: Java的继承 的继承 第10页/共175页 12 66: class IP-Card extends Number-PhoneCard 67: 68: Date expireDate; 69: boolean performDial( ) 70: 71: if( balance 0.3 74: return true; 75: 76: el

6、se 77: return false; 78: 79: Java的继承 的继承 第11页/共175页 13 80: class D200-Card extends Number-PhoneCard 81: 82: double additoryFee; 83: 84: boolean performDial( ) 85: 86: if( balance (0.5 + additoryFee ) 87: 88: balance -= (0.5 + additoryFee); 89: return true; 90: 91: else 92: return false; 93: 94: Java

7、的继承 的继承 第12页/共175页 14 Card类中)句中都使用了balance域 n它们自身并未定义balance域,使用的balance都 是从父类PhoneCard那里继承来的 Java的继承 的继承 第13页/共175页 15 含当前日期的Date类的对象 nafter( )方法是Date类的方法,在失效日期比当前 日期晚时,expireDate.after(new Date( )返回true, 否则返回false Java的继承 的继承 第14页/共175页 16 Java的继承 的继承 第15页/共175页 17 80: class D200-Card extends Numb

8、er-PhoneCard 81: 82: double additoryFee; 83: double balance; 84: boolean performDial( ) 85: 86: if( balance (0.5 + additoryFee ) 87: 88: balance -= (0.5 + additoryFee); 89: return true; 90: 91: else 92: return false; 93: 94: Java的继承 的继承 第16页/共175页 18 Java的继承 的继承 第17页/共175页 19 1: public class TestHid

9、denField 2: 3: public static void main(String args) 4: 5: D200-Card my200 = new D200-Card( ); 6: my200.balance = 50.0; 7: System.out.println(父类被隐藏的金额为: +my200.getBalance( ); 8: if(my200.performDial( ) 9: System.out.println(子类的剩余金额为:+my200.balance); 10: 11: 12:abstract class PhoneCard 13: 14: double

10、balance; Java的继承 的继承 第18页/共175页 20 15: 16: abstract boolean performDial( ); 17: double getBalance( ) 18: 19: return balance; 20: 21: 22:abstract class Number-PhoneCard extends PhoneCard 23: 24: long cardNumber; 25: int password; 26: String connectNumber; 27: boolean connected; 28: Java的继承 的继承 第19页/共

11、175页 21 29: boolean performConnection(long cn,int pw) 30: 31: if(cn = cardNumber 34: return true; 35: 36: else 37: return false; 38: 39: 40: class D200-Card extends Number-PhoneCard 41: 42: double additoryFee; 43: double balance; Java的继承 的继承 第20页/共175页 22 44: 45: boolean performDial( ) 46: 47: if( b

12、alance (0.5 + additoryFee ) 48: 49: balance -= (0.5 + additoryFee); 50: return true; 51: 52: else 53: return false; 54: 55: Java的继承 的继承 第21页/共175页 23 Java的继承 的继承 第22页/共175页 24 有被赋值,其数值是缺省的0.0 n第8句调用my200对象的performDial( )方法拨打 电话,修改my200对象自身的balance变量。第9 句输出拨打电话之后,my200对象的balance变量 的数值 Java的继承 的继承 第23

13、页/共175页 25 Java的继承 的继承 第24页/共175页 26 Java的继承 的继承 第25页/共175页 27 Java的继承 的继承 第26页/共175页 28 n更多的情况下,this用来把当前对象的引用作为 参数传递给其他的对象或方法 Java的继承 的继承 第27页/共175页 29 Java的继承 的继承 第28页/共175页 30 Java的继承 的继承 第29页/共175页 31 1: import java.applet.*; 2: import java.awt.*; 3: import java.awt.event.*; 4: 5: public class

14、getDouble extends Applet implements ActionListener 6: 7: Label prompt; 8: TextField input; 9: double d = 0.0; 10: 11: public void init( ) 12: 13: prompt = new Label(请输入一个浮点数:); 14: input = new TextField(10); Java的继承 的继承 第30页/共175页 32 15: add(prompt); 16: add(input); 17: input.addActionListener(this)

15、; 18: 19: public void paint(Graphics g) 20: 21: g.drawString(你输入了数据: + d, 10, 50); 22: 23: public void actionPerformed(ActionEvent e) 24: 25: d = Double.valueOf(input.getText( ).doubleValue( ); 26: repaint( ); 27: 28: Java的继承 的继承 第31页/共175页 33 Java的继承 的继承 第32页/共175页 34 类 n子类自动地继承父类的属性和方法 n一般情况下,使用th

16、is可以访问父 类的域和方法 n有时为了明确地指明父类的域和方 法,就要用关键字super Java的继承 的继承 第33页/共175页 35 Java的继承 的继承 第34页/共175页 36 school ); n从这里可以看出,即使同名,也仍 然可以使用父类的域和方法,这也 使得在覆盖父类的方法的同时,又 利用已定义好的父类的方法 Java的继承 的继承 第35页/共175页 37 n使用时,super()必须放在第一句 Java的继承 的继承 第36页/共175页 38 1: public class TestHiddenField 2: 3: public static void m

17、ain(String args) 4: 5: D200-Card my200 = new D200-Card( ); 6: my200.balance = 50.0; 7: System.out.println(父类被隐藏的金额为: +my200.getBalance( ); 8:if(my200.performDial( ) 9: System.out.println(子类的剩余金额为:+my200.balance); 10: 11: 12: abstract class PhoneCard 13: 14: double balance; Java的继承 的继承 第37页/共175页 39

18、15: 16: abstract boolean performDial( ); 17: double getBalance( ) 18: 19: return balance; 20: 21: 22: abstract class Number-PhoneCard extends PhoneCard 23: 24: long cardNumber; 25: int password; 39: 40: class D200-Card extends Number-PhoneCard 41: 42: double additoryFee; Java的继承 的继承 第38页/共175页 40 43

19、: double balance; 44: 45: boolean performDial( ) 46: 47: if( balance (0.5 + additoryFee ) 48: 49: balance -= (0.5 + additoryFee); 50: return true; 51: 52: else 53: return false; 54: 55: double getBalance( ) 56: 57: return super.balance; 58: 59: Java的继承 的继承 第39页/共175页 41 Java的继承 的继承 第40页/共175页 42 Jav

20、a的继承 的继承 第41页/共175页 43 Java的继承 的继承 第42页/共175页 44 Java的继承 的继承 第43页/共175页 45 public class ConstructCallThisAndSuper public static void main(String args) Person p = new Graduate(); class Person String name; int age; Person() Person( String name, int age ) =name; this.age=age; System.out.printl

21、n(In Person(String,int); Java的继承 的继承 第44页/共175页 46 class Student extends Person String school; Student( String name, int age, String school ) super(name, age); this.school = school; System.out.println(In Student(String,int,String); Student() this(null, 0, null); System.out.println(In Student(); clas

22、s Graduate extends Student Graduate() System.out.println(In Graduate(); Java的继承 的继承 第45页/共175页 47 Java的继承 的继承 第46页/共175页 48 (在以前的某个时候根据(1)把子类对象的引用赋 值给这个父类对象的引用),那么这个父类对象 的引用可以用强制类型转换转化成子类对象的 引用 Java的继承 的继承 第47页/共175页 49 /定义父类 class SuperClass int x; /定义子类 class SubClass extends SuperClass int y; cha

23、r ch; /使用父类与子类 public class UseSuperSub SuperClass sc, sc-ref; SubClass sb, sb-ref; sc = new SuperClass( ); sb = new SubClass( ); /父类引用可以指向子类对象 sc-ref = sb; /父类引用转换成子类引用 sb-ref = (SubClass)sc-ref; Java的继承 的继承 第48页/共175页 50 doStuff(t); doStuff(l); Java的继承 的继承 第49页/共175页 51 第50页/共175页 52 Java的多态 的多态 第

24、51页/共175页 53 n在面向对象的程序设计中,为了解决这个问题, 引入了多态的概念 Java的多态 的多态 第52页/共175页 54 n提高了类模块的封闭性,使得它们不需了解对 方的具体细节,就可以很好地共同工作 Java的多态 的多态 第53页/共175页 55 法,虽然内容不同,但却共享相同的名字 “performDial” Java的多态 的多态 第54页/共175页 56 n至于业务员使用何种电话卡,具体如何拨打电 话这些细节则不需要总部了解,系统会自动分 辨所使用的电话卡是哪种类型的电话卡,并调 用相应的拨打电话的具体方法 Java的多态 的多态 第55页/共175页 57

25、定义若干个名字都叫print的方法,每个方法 用来完成一种不同于其他方法的具体打印 操作,处理一种具体的打印情况 Java的多态 的多态 第56页/共175页 58 Java的多态 的多态 第57页/共175页 59 Java的多态 的多态 第58页/共175页 60 class Shape void draw() System.out.println(Shape Drawing); class Circle extends Shape void draw() System.out.println(Draw Circle); class Triangle extends Shape void

26、draw() System.out.println(Draw Three Lines); Java的多态 的多态 第59页/共175页 61 class Line extends Shape void draw() System.out.println(Draw Line); class TestVirtualInvoke static void doStuff( Shape s ) s.draw(); public static void main( String args ) Circle c = new Circle(); Triangle t = new Triangle(); Lin

27、e l = new Line(); doStuff(c); doStuff(t); doStuff(l); Java的多态 的多态 第60页/共175页 62 nstatic, private, 和 final不存在虚方法的调用问 题 Java的多态 的多态 第61页/共175页 63 class InstanceOf public static void main(String args) Object things = new Object3; things0 = new Integer(4); things1 = new Double(3.14); things2 = new Doubl

28、e(2.09); double s = 0; for( int i=0; ithings.length; i+ ) if( thingsi instanceof Integer ) s += (Integer)thingsi).intValue(); else if( thingsi instanceof Double ) s += (Double)thingsi).doubleValue(); System.out.println(sum= + s); Java的多态 的多态 第62页/共175页 64 Java的多态 的多态 第63页/共175页 65 import java.lang.r

29、eflect.*; class RunTimeClassInfo public static void main(String args) Object obj = new java.awt.Color(1,1,1); Class cls = obj.getClass(); System.out.println( 类名: + cls.getName() ); Field fields = cls.getFields(); for( int i=0; ifields.length; i+ ) Field f = fieldsi; System.out.println( 域: + f.getNam

30、e() + : + f ); Method methods = cls.getMethods(); for( int i=0; i (0.5 + additoryFee ) 48: 49: balance -= (0.5 + additoryFee); 50: return true; 51: 52: else 53: return false; 54: 55: double getBalance( ) 56: 57: return balance; 58: 59: Java的覆盖 的覆盖 第70页/共175页 72 Java的覆盖 的覆盖 第71页/共175页 73 第72页/共175页 7

31、4 Java的重载 的重载 第73页/共175页 75 1: public class TestOverride 2: 3: public static void main(String args) 4: 5: D200-Card my200 = new D200-Card(12345678,1234,50.0,200); 6: if(my200.performDial(12345678,1234) 7: System.out.println(拨打电话后剩余金额为: +my200.getBalance( ); 8: if(my200.performDial( ) 9:System.out.pr

32、intln(拨打电话后剩余金额为: +my200.getBalance( ); 10: 11: Java的重载 的重载 第74页/共175页 76 12: abstract class PhoneCard 13: 14: double balance; 15: 16: abstract boolean performDial( ); 17: double getBalance( ) 18: 19: return balance; 20: 21: 22: abstract class Number-PhoneCard extends PhoneCard 23: 24: long cardNumb

33、er; 25: int password; 26: String connectNumber; 27: boolean connected; Java的重载 的重载 第75页/共175页 77 28: 29: boolean performConnection(long cn,int pw) 30: 31: if(cn = cardNumber 34: return true; 35: 36: else 37: return false; 38: 39: 40: class D200-Card extends Number-PhoneCard 41: 42: double additoryFe

34、e; 43: Java的重载 的重载 第76页/共175页 78 44: D200-Card(long cn,int pw,double b,String c) 45: 46: cardNumber = cn; 47: password = pw; 48: balance = b; 49: connectNumber = c; 50: 51: boolean performDial( ) 52: 53: if(!connected) 54: return false; 55: if( balance (0.5 + additoryFee ) 56: 57: balance -= (0.5 +

35、additoryFee); 58: return true; 59: 60: else 61: return false; 62: Java的重载 的重载 第77页/共175页 79 63: boolean performDial(long cn,int pass) 64: 65: if(performConnection(cn,pass) 66: return performDial( ); 67: else 68: return false; 69: 70: double getBalance( ) 71: 72: if(connected) 73: return balance; 74:

36、 else 75: return -1; 76: 77: Java的重载 的重载 第78页/共175页 80 Java的重载 的重载 第79页/共175页 81 connecttrue 回false Java的重载 的重载 第80页/共175页 82 n Java的重载 的重载 第81页/共175页 83 第82页/共175页 84 构造函数的重载与继承构造函数的重载与继承 第83页/共175页 85 D200-Card( )/没有形式参数的构造函数,不完成任何操作 D200-Card(long cn) /一个参数的构造函数,初始化电话卡号 cardNumber = cn; D200-Card

37、(long cn, int pw) /两个参数的构造函数,初始化电话卡号和密码 cardNumber = cn; password = pw; 构造函数的重载与继承构造函数的重载与继承 第84页/共175页 86 D200-Card(long cn,int pw,double b) /三个参数的构造函数,初始化卡号、 密码和金额 cardNumber = cn; password = pw; balance = b; D200-Card(long cn,int pw,double b,String c)/四个参数的构 造函数,初始化 卡号、密码、金额和接入号码 cardNumber = cn;

38、 password = pw; balance = b; connectNumber = c; 构造函数的重载与继承构造函数的重载与继承 第85页/共175页 87 构造函数的重载与继承构造函数的重载与继承 第86页/共175页 88 构造函数的重载与继承构造函数的重载与继承 第87页/共175页 89 D200-Card( )/没有形式参数的构造函数,不完成任何操作 D200-Card(long cn) /一个参数的构造函数,初始化电话卡号 this(); cardNumber = cn; D200-Card(long cn,int pw) /两个参数的构造函数,初始化电话卡号和密码 thi

39、s(cn); /cardNumber = cn; password = pw; 构造函数的重载与继承构造函数的重载与继承 第88页/共175页 90 D200-Card(long cn,int pw,double b) /三个参数的构造函数,初始化卡号、 密码和金额 this(cn, pw); /cardNumber = cn; password = pw; balance = b; D200-Card(long cn,int pw,double b,String c)/四个参数的构 造函数,初始化 卡号、密码、金额和接入号码 this(cn, pw, b); /cardNumber = cn

40、; password = pw; balance = b; connectNumber = c; 构造函数的重载与继承构造函数的重载与继承 第89页/共175页 91 构造函数的重载与继承构造函数的重载与继承 第90页/共175页 92 n举例:假设父类Number-PhoneCard也有五 个构造函数 构造函数的重载与继承构造函数的重载与继承 第91页/共175页 93 Number-PhoneCard( ) Number-PhoneCard(long cn) cardNumber = cn; Number-PhoneCard(long cn,int pw) cardNumber = cn;

41、 password = pw; 构造函数的重载与继承构造函数的重载与继承 第92页/共175页 94 Number-PhoneCard(long cn,int pw,double b) cardNumber = cn; password = pw; balance = b; Number-PhoneCard(long cn,int pw,double b,String c) cardNumber = cn; password = pw; balance = b; connectNumber = c; 构造函数的重载与继承构造函数的重载与继承 第93页/共175页 95 additoryFeea

42、; /用新参数初始化附加费 构造函数的重载与继承构造函数的重载与继承 第94页/共175页 96 构造函数的重载与继承构造函数的重载与继承 第95页/共175页 97 构造函数的重载与继承构造函数的重载与继承 第96页/共175页 98 class ConstructSequence public static void main(String args) Person p = new Student(李明, 18, 北大); class Person String name = 未命名; int age = -1; Person( String name, int age ) System.

43、out.println( 开始构造Person(),此时=++, this.age=+this.age ); =name; this.age=age; System.out.println( Person()构造完成,此时=++, this.age=+this.age ); 构造函数的重载与继承构造函数的重载与继承 第97页/共175页 99 class Student extends Person String school=未定学校; Student( String name, int age, St

44、ring school ) super( name, age ); System.out.println( 开始构造Student(),此时=“ + + “, this.age=+this.age+,this.school=+this.school ); this.school = school; System.out.println( Student()构造完成,此时=++ ,this.age=+this.age+,this.school=+this.school ); 构造函数的重载与继承构造函数的重载与继承 第98页

45、/共175页 100 构造函数的重载与继承构造函数的重载与继承 第99页/共175页 101 1: public class ConstructorOverride 2: 3: public static void main(String args) 4: 5: D200-Card my200=new D200- Card(12345678,1234,50.0,200,0.1); 6: System.out.println(my200.toString( ); 7: 8: 9: abstract class PhoneCard 10: 11: double balance; 12: 13: a

46、bstract boolean performDial( ); 14: double getBalance( ) 15: 16: return balance; 17: 18: 构造函数的重载与继承构造函数的重载与继承 第100页/共175页 102 19: abstract class Number-PhoneCard extends PhoneCard 20: 21: long cardNumber; 22: int password; 23: String connectNumber; 24: boolean connected; 25: 26: Number-PhoneCard( )

47、27: 28: 29: Number-PhoneCard(long cn) 30: 31: this( ); 32: cardNumber = cn; 33: 构造函数的重载与继承构造函数的重载与继承 第101页/共175页 103 34: Number-PhoneCard(long cn,int pw) 35: 36: this(cn); 37: password = pw; 38: 39: Number-PhoneCard(long cn,int pw,double b) 40: 41: this(cn,pw); 42: balance = b; 43: 44: Number-PhoneC

48、ard(long cn,int pw,double b,String c) 45: 46: this(cn,pw,b); 47: connectNumber = c; 48: 构造函数的重载与继承构造函数的重载与继承 第102页/共175页 104 49: boolean performConnection(long cn,int pw) 50: 51: if(cn = cardNumber 54: return true; 55: 56: else 57: return false; 58: 59: 构造函数的重载与继承构造函数的重载与继承 第103页/共175页 105 60: class

49、 D200-Card extends Number-PhoneCard 61: 62: double additoryFee; 63: 64: D200-Card(long cn,int pw,double a) 65: 66: super(cn,pw); 67: additoryFee = a; 68: 69: D200-Card(long cn,int pw,double b,double a) 70: 71: super(cn,pw,b); 72: additoryFee = a; 73: 构造函数的重载与继承构造函数的重载与继承 第104页/共175页 106 74: D200-Car

50、d(long cn,int pw,double b,String c,double a) 75: 76: super(cn,pw,b,c); 77: additoryFee = a; 78: 79: boolean performDial( ) 80: 81: if(!connected) 82: return false; 83: if( balance (0.5 + additoryFee ) 84: 85: balance -= (0.5 + additoryFee); 86: return true; 87: 88: else 89: return false; 90: 构造函数的重载

51、与继承构造函数的重载与继承 第105页/共175页 107 91: boolean performDial(long cn,int pass) 92: 93: if(performConnection(cn,pass) 94: return performDial( ); 95: else 96: return false; 97: 98: double getBalance( ) 99: 100: if(connected) 101: return balance; 102: else 103: return -1; 104: 构造函数的重载与继承构造函数的重载与继承 第106页/共175页 108 105: public String toString(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论