




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第十章 继承,学习目标: 如何声明父类和子类 用代码实现继承 测试继承的有效性 super与this final关键字的使用 abstract关键字的使用 接口的定义,继承概述,有重复成员的类,public class Person public String name; public int age; public int getInfo() public class Student public String name; public int age; public int getInfo() public String schoolName; public void study() ,p
2、ublic class Person public String name; public int age; public int getInfo() public class Student extends Person public String schoolName; public void study() ,Person Student,继承使得Person类的所有可继承的变量和方法(区分哪些是可继承,哪些是受限制),都可以在Student类中使用,父类,子类,继承的定义,继承:指以原有的类为基础来创建一个新类,从而实现代码重用。 被继承的类是:超类或父类 继承而来的类是:子类,定义继
3、承的形式为: 访问权限class类名 extends父类 ,注意:1、没有extends,默认父类为Object 2、只有一个父类,即单继承 3、类继承具有传递性 class A class B extends A class C extends B 其中,B类继承A类,C类继承B类,那么C类也间接继承了A类,继承的实现 1、java中类是一个层次结构,其中Object类是所有类的根,java中所有的类都直接或者间接继承Object类 2、子类可以继承父类的非私有成员变量和非私有方法,但不继承父类的构造方法。,(注意区别哪些是可继承和不可继承!),测试继承,类一次只能继承一个父类(单继承) 使
4、用“是一个(is a)”短语验证继承 Person和Student的继承是正确的 一个Student是一个Person,测试继承,错误原因:不满足“ is a” 短语,正确原因:满足“ is a” 短语,super是什么,super用来引用父类的实例对象 主要用途: 用于访问父类中非private的成员变量和成员方法,如: super.variable; super.method(参数列表); (2)用于调用父类的构造方法,如: super(参数列表); 使用时,必须放在第一句!,示例1:在子类成员方法中调用父类成员方法,查看结果:OverTest.java,查看结果:AddTest.java
5、,this是什么?,在每个非静态成员方法内部,都有一个this引用变量,指向调用这个方法的实例。 This的真正含义是这个方法所属的实例的引用变量,this的应用一,让类的成员变量名和对其进行赋值的成员方法的局部变量同名是必要的,这样的代码谁看了都能明白这两个变量是彼此相关的。见书p125 class Person String name; public Person(String name) name=name; ,=name;,this的应用二,构造方法不能被显示调用,但是可以在一个构造方法中调用其它重载的构造方法,用this(参数列表)的形式。 此时,先执行this表示
6、的构造方法,再执行自己。 注意:在调用其它的构造方法的时候,使用this(参数列表)必须是构造方法中的第一条语句,并且在一个构造方法中最多只能调用一个其他的构造方法。,查看结果:Person1.java,位置! 个数!,想一想: 1)为什么this(参数列表)和super(参数列表)不能同时出现在同一个构造方法中? 2)为什么this(参数列表)和super(参数列表)只能作为构造方法中的第一句出现?,子类与父类构造方法的关系,1、在子类的构造方法中可使用语句super(参数列表) 调用父类的构造方法。 2、如果子类的构造方法中没有显式调用父类的构造方法,也没有使用this关键字调用重载的其他
7、构造方法, 则在产生子类实例的时候系统会默认调用父类的无参数的构造方法。 3、如果子类的构造方法中没有显式调用父类的构造方法,而父类中又没有定义无参数的构造方法(只有当父类没有显式定义任何构造方法时,才会有默认的构造方法),则编译出错。,查看结果:Student.java,切记!,因此:我们在定义类的时候,只要定义了有参数的构造方法,通常就还需要定义一个无参数的构造方法。,覆盖父类的方法,子类可以根据需要对父类中继承来的方法进行改造这就是方法的覆盖 覆盖方法必须和被覆盖方法具有相同的方法名称,参数列表和返回值类型 覆盖方法时,不能使用比父类中被覆盖方法更严格的访问权限! 如:父类中的方法是pu
8、blic的,子类中覆盖方法就不能为private的,查看结果:Student.java,final关键字,在Java中关键字final可以用于修饰类、成员变量和方法 final标记的类不能被继承。 final标记的方法不能被子类覆盖。 final标记的变量(成员变量或局部变量)即成为常量,只能赋值一次。,final 关键字修饰成员变量,常量:如果变量被标记为final,其结果是使它成为常量,只能被赋值一次。 public class Bank private final double DEFAULT_RATE = 3.2 ; final Box myBox1=new Box(); public
9、 static final int a=20; ,注意: 1、想改变final变量的值会导致一个编译错误。 2、如果将引用类型的变量标记为final,那么该变量不能指向任何其它对象。但可能改变对象的内容,因为只有引用本身是final。,final 关键字,方法 final方法无法被覆盖,即给方法加锁。 类 final类没有子类,即不能被继承。,小结,定义成员变量的格式: 访问权限 static final 类型 变量名;,abstract关键字,用abstract关键字 来修饰一个类时,这个类叫做抽象类 abstract类必须被继承 抽象类不能被实例化 来修饰一个方法时,该方法叫做抽象方法。
10、abstract方法必须被覆盖 抽象方法只含有声明,而没有具体实现。 由于抽象方法没有实现,必须声明为abstract,格式为 Abstract 返回值类型 方法名(参数列表); 如:abstract void f();,抽象类中的抽象方法,public abstract class SomeAbstractClass public void method1() System.out.println(“Hi, Java”); public abstract void method2(); /抽象方法后加分号 ,抽象类,抽象类定义规则: 抽象类必须用abstract关键字来修饰;抽象方法也必须用
11、abstract来修饰。 抽象类不能被实例化,也就是不能用new关键字去产生实例对象,但可以创建抽象类的引用 含有抽象方法的类必须被声明为抽象类,抽象类的子类如果不是抽象类,就必须覆盖父类所有的抽象方法后才能被实例化,否则这个子类还是个抽象类。,注意: 1、含有抽象方法的类一定是抽象类 2、抽象类中的方法不一定全部是抽象的,单继承性和接口,java的单继承性使得类结构成为以System.Object类为根的一棵树。,java用接口(interface)来获得多继承性。 接口克服了多继承性带来的一些问题。,接口的定义,在Java里,设计接口的用意,是为实现多重继承的一种特殊机制。 接口可以理解为
12、一个特殊的类,只有常量和抽象方法组成的特殊类。 每个接口一般也是定义在.java 文件中 public interface Collection int MAX_NUM=100; void add(int a); void delete(int b); int find(int c); int currentCount(); ,接口是用来实现类间多重继承功能的结构。 通过接口可以实现不相关类的相同行为,而不需考虑这些类之间的层次关系 通过接口可以指明多个类需要实现的方法 接口的语法: interface extends , public static final 数据类型 常量名=常量值; p
13、ublic abstract 返回类型 方法名(参数列表); 接口中所有的方法默认都是public abstract的 接口中的成员变量默认都是public static final的 接口可以继承多个接口,但不能继承类,示例,例1: 通过接口定义一些常量 public interface J_Constants public static final int ONE = 1; public static final int TWO = 2; public static final int THREE = 3; / 接口J_Constants结束 例2: interface J_Shape p
14、ublic abstract void mb_draw(int x,int y); / 接口J_Shape结束,接口(interface),可以定义一个接口用extends关键字去继承一个已有的接口 可以定义一个类用implements关键字去实现一个接口中的所有方法 可以去定义一个抽象类用implements关键字去实现一个接口中定义的部分方法。 一个类可以继承一个父类的同时,实现一个或多个接口,extends关键字必须位于implements关键字之前 。 public class A extends B implements C, D ,接口示例,interface Collection
15、 int MAX_NUM=100; void add(int a); void delete(int b); int find(int c); int count(); class TestCollection implements Collection public void add(int a) 方法体 public void delete(int b) 方法体 public int find(int c) 方法体 public int count() 方法体 ,注: 如果实现某接口的类不是抽象类,则类中必须实现指定接口的全部抽象方法,且方法头部分要与接口中的定义完全一致(包括返回值,方法名,参数列表)。 如果实现某接口的类是抽象类,则该类的任何一个非抽象的子类必须有它们父类所实现接口的所有抽象方法的方法体。 所有实现接口中的方法必须被申明为public的,接口的实现与接口特点小结,实现一个接口就是要实现该接口的所有方法(抽象类除外) 接口中的方法都是抽象的 多个无关的类可以实现同一个接口 一个类可以实现多个无关的接口,查看结果:Runner.java,package 语句 /0或1个,必须放在文件开始 import语句 /0或多个,必须放在所有类定义之前 public class HelloWroldApp /公共类0或1个 /文件名必须与该类的类名完全相
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 产品宣传服务协议合同
- 土方买卖合同协议书
- 劳务派遣与工厂签合同
- 手房卖买定金合同
- 南京住宅租赁合同
- 绿化养护合同范本
- 轿车租给公司合同范本
- 摄像仪维修合同范本
- 露营免责协议合同范本
- 借钱分期还款合同范本
- 2025年初级会计师考试学员疑惑解答试题及答案
- DB51T3251-2025煤矿井下应急广播系统使用管理规范
- 体检中心工作制度和岗位职责
- 【小学】【带班育人方略】三阶四步:培育“三品”少年
- 2025健身房合作的合同模板
- 云计算服务应用理解试题及答案
- 相反国课件-大班
- 国家开放大学《初级经济学》形考任务1-3参考答案
- 医药企业采购工作流程图(精华版)
- 内科学教学课件:21 消化道出血
- 汽车零部件有限公司各部长绩效考核KPI
评论
0/150
提交评论