第11章 继承1.ppt_第1页
第11章 继承1.ppt_第2页
第11章 继承1.ppt_第3页
第11章 继承1.ppt_第4页
第11章 继承1.ppt_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

1、第5章 继承,第一讲,本章学习目标,理解继承的含义 掌握继承的方法 掌握方法的覆盖 掌握父子类对象的转化 掌握final修饰符的用法 掌握abstract修饰符的用法,本节课内容,继承的定义 属性的继承和隐藏,满足继承关系的例子,class Bus public String number; public String color; public void start() public int station; public void sellTicket() ,class Autocar public String number; public String color; public vo

2、id start() ,例子,继承的定义,面向对象中在已有类的基础上扩展出新类的方式称为继承。继承用于描述两个类之间的“is-a”关系。 扩展出的新类称为子类(次类),被继承的类称为父类(超类)。,继承的语法,修饰符 class 子类名 extends 父类名 类体; 例如:class Apple extends Fruit ,【注】Java只支持单重继承,即只有一个父类的继承关系 示例:SchoolMember.java,要点,在继承中: 子类可以得到父类的属性和方法。 子类可以添加新的属性和方法。 子类可以重新定义父类的属性和方法。 SchoolMember.java,举一反三,定义Sch

3、oolMember的子类Teacher类,该类除了有父类的特征外,还应有主讲课程(teach)属性和访问器方法,同时需要有能够介绍主讲课程的introduce方法。,继承要点: 子类只能继承父类中可访问的属性 父子类在一个包中,子类可以继承父类中的非私有属性 父子类不在一个包中,子类可以继承public类中的,public属性和protected属性,属性的继承与隐藏,属性的继承,父子类在同一个包中 Base.java(5-2) 父子类不在同一个包中 Base.java(5-3) Inh2.java,属性隐藏,子类可以定义与父类同名的属性,称为属性隐藏。即子类重新定义父类的属性。 示例:Tes

4、t.java,要点,调用属性的规则:先在当前类中找,如果没有再到其父类中找,以此类推。 当子类执行继承自父类的操作时,处理的是继承自父类的属性,当子类执行自己定义的方法时,处理的是子类自己重新定义的同名属性。,要点,如果想要调用被隐藏的父类属性,静态属性可以使用“类名.属性名”;非静态属性可以用“super.属性名”,方法的继承与覆盖,方法的继承 方法的继承原则与属性一致 示例Base.java(5-5) Base.java (5-6) Inh5.java,方法的覆盖,在子类中可以定义与父类方法头相同的方法,称为方法的覆盖。 也可以说,通过方法覆盖,子类可以重新定义父类的方法。 示例1:Sch

5、oolMember.java 示例2:Test2.java,要点,方法覆盖:子类中定义与父类中相同方法头的方法。 如果在子类中要调用被覆盖的方法,对于静态方法,可以使用“类名.方法名”调用,对于非静态方法,可以使用“super.方法名”调用,注意要点,子类在重新定义父类中的已有方法时,应保持和父类中该方法相同的方法头,即有完全相同的方法名、返回值类型和参数列表。 方法覆盖时,子类方法不能缩小父类方法的访问权限。比如:父类的方法如果是protected,子类方法只能是protected或者public,举一反三,创建Animal类,有属性name和color。 创建Cat类为Animal的子类,

6、有方法climb。 在main方法里创建Cat对象,name属性设为cat。输出它的名字(cat),调用它的climb方法。,注意,仅当实例方法是可访问时,他才能被覆盖。如果子类中定义的方法在父类中是私有的,那么这个两个方法完全没有关系。 与实例方法一样,静态方法也能被继承。但是静态方法不能被覆盖。如果父类中定义的静态方法在子类中重新被定义,那么定义在父类中的静态方法将被隐藏。可以父类名、静态方法名调 用隐藏的静态方法。,重载与覆盖区别,public class Test public static void main(Stringargs) A a=new A(); a.p(10); a.p

7、(10.0); class B public void p(double i) System.out.println(i*2); class A extens B public void p(double i) System.out.println(i); ,public class Test public static void main(Stringargs) A a=new A(); a.p(10); a.p(10.0); class B public void p(double i) System.out.println(i*2); class A extens B public vo

8、id p(int i) System.out.println(i); ,继承关系中的构造方法,在创建子类对象时,先调用父类构造方法,然后再调用子类构造方法,构成构造方法链 示例:TestConstructor.java 默认情况下,子类调用父类无参的构造方法,示例,public class Faculty extends Employee public static void new main(String args) new Faculty(); public Faculty() system.out.println(4) Performs Facultys tasks); public c

9、lass Employee extends Person public Employee() this(2) Invoke Employees overloaded constructor) system.out.println(3) Performs Employes tasks); ,public Employee(String s) system.out.println(s); public class Person public Person() system.out.println(1) Performs Persons tasks); ,注意:,如果一个类要设计为扩展的,做好提供一

10、个无参构造方法以避免程序设计错误 public class Apple extends Fruit public class Fruit public Fruit(String s) system.out.println(s); ,继承关系中的构造方法,如果父类中只提供有参没有无参的构造方法,则在默认情况下,创建其子类对象会出错。 示例:TestConstructor.java,继承关系中的构造方法,如果希望调用父类有参构造方法,可以借助super完成。 示例:TestConstructor.java,super,在子类中调用父类的属性和方法 super指当前类的父类对象,所以不能在静态方法中

11、使用。 在子类构造方法中指明调用父类的构造方法。 必须写在子类构造方法的第一条。,构造方法使用原则,先调用父类构造方法,再调用子类构造方法 默认调用父类无参构造方法 可用super在子类构造方法中指明调用父类构造方法,总结:this 和super的用法,this代表当前类的对象;super代表当前类的父类对象。 this可以调用当前类当中的其他构造方法,而super可以调用当前类父类中的构造方法。 注意:this和super都不能用在static修饰的方法内;并且this和super不能同时使用,示例,编写圆Circle类的子类圆柱Cylinder。 Circle.java Cylinder.java,final修饰符,final可以修饰属性和局部变量,称为常量,一旦赋值不能修改。 比如:final double PI = 3.14 ; 示例:BlankFinal.java 注意,如果常量类型为引用类型时,只是这个引用值不能改变,并不是引用的对象的属性不能改变。,final修饰符,fin

温馨提示

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

评论

0/150

提交评论