第八章 实现继承
主要知识点
1、继承的概念
2、继承的实现
3、用this和super关键字实现继承
4、抽象类的实现
学习目标
掌握继承和抽象类的定义和实现方法。借助集成,可以扩展原有的代码,应用到其他程序中,而不必要重新编写这些代码。扩展声明的新类称为子类,原有的类称为超类(父类)。继承机制规定,子类可以拥有超类的所有属性和方法,也可以扩展定义自己特有的属性,增加新方法和重新定义超类的方法。
8.1 定义继承
8.1.1 继承的概念
继承的实体是类而非人。也就是说继承是子类拥有父类的成员。这样不但可以节省程序的开发时间,而且还提高了代码的可重用性。通过继承可以实现代码的重用,被继承的类称为父类或者超类,由集成而得到的类称为子类。
8.1.2 继承的定义方法
类的继承是通过关键字extends来实现的,在两个类之间建立了继承关系。子类创建的语法格式为:
class subclass-name extends superclass-name{ // 类体 }
8.2 子类对父类的访问
当发生继承时,如何判断对象的方法是父类的还是子类的。在Java中有两个非常特殊的变量:this和super,这两个变量在使用前,都不需要声明。this变量在一个成员函数的内部使用,指向当前对象,当前对象指的是当前正在调用执行方法的那个对象。super变量直接指向父类的构造函数,用来引用父类的变量和方法。
8.2.1 调用父类中特定的构造方法
在没有明确地指定构造方法时,子类会先调用父类中没有参数的构造方法,以便进行初始化操作。在子类的构造方法中可以通过super()来调用父类特定的构造方法。
在子类中通过super(name,age);来调用父类的有参构造方法;
说明:
(1)在子类中访问父类的构造方法,其格式为:super(参数列表);
(2)super()可以重载,super()会根据参数的个数与类型,来执行父类相应的构造方法。
(3)调用父类构造方法的super()语句必须卸载子类构造方法中的第一行;
8.2.2 在子类中访问父类的成员
如果子类的成员是直接父类继承过来的,,可以通过以下形式访问:
(1)访问当前对象的数据成员:this.数据成员。
(2)调用当前对象的成员方法:this.成员方法(参数)。
其中子类对从父类继承过来的成员属性重新加以定义,称为属性的隐藏。子类对于从父类继承过来的成员方法重新加以定义,称为方法的重写(覆盖)。通过关键字super来指明父类的数据成员和方法,形式跟上面子类很像。
8.3 抽象类
8.3.1 抽象类的概念
如果一个类中没有包含足够的信息来描述一个具体的对象,这样的类就是抽象类。因为抽象概念在问题领域没有对应的具体概念,所以用来表征抽象概念的抽象类是不能实例化的。在面向对象领域中,抽象类主要用来进行类型隐藏,可以构造出一个固定的一组行为的抽象描述,但是这组行为能够有任意个可能的具体实现方法,这个抽象描述就是抽象类。
8.3.2 定义抽象类
抽象类是以修饰符abstract修饰的类,定义抽象类的语法格式如下:
abstract class 类名{ 声明成员变量; 返回值的数据类型 方法名(参数表) // 一般方法 { ...... } abstract 返回值的数据类型 方法名(参数表); // 抽象方法 }
说明:
(1)由于抽象类是需要被继承的,所以abstract类不能用final来修饰。也就是说,一个类不能既是最终类,又是抽象类,即关键字abstract和final不能同时用;
(2)抽象类的子类必须实现父类中的所有抽象方法,或者将自己也声明为抽象类。
(3)抽象类不一定包含抽象方法,但是包含抽象方法的类一定被声明为抽象类。
(4)一个类被定义为抽象类,则该类就不能用new运算符创建具体实例对象,而必须通过覆盖的方式来实现抽象类中的方法。
习题
一、简单题
1、实现类的继承是通过哪个关键字实现的?
2、Java能实现多继承关系吗?如何解决这个问题?
3、如果父类和子类同时提供了同名方法,在类实例化后,调用的是哪个类的方法?采用什么办法可以避免混淆?
4、什么是抽象类?抽象类和普通类有什么不同?
二、操作题
1、定义一个银行卡的类BankCard作为父类,成员属性和成员方法根据实际情况自行确定,然后分别定义万事达卡Master类和维萨卡Visa类作为BankCard的子类,实现他们之间的继承关系。
2、定义一个表示学习方法的抽象类StudyMethod,其中包括3个抽象方法,分别是学习英语English、学习语文Chinese、学习计算机Computer,写出此抽象方法的代码。
标签:构造方法,继承,子类,第八章,---,面向对象编程,抽象类,父类,方法 From: https://www.cnblogs.com/kuangmeng/p/18322530