java中的继承
java中的继承问题分为两类:一是成员变量的继承;二是成员方法的继承。
成员变量的继承
特点
子类只能继承父类的非私有成员变量
成员变量引用原则(就近原则)
变量名相同,引用顺序为:局部变量 -> 子类成员变量 -> 父类成员变量
变量之间的区别调用
this
调用子类的成员变量,super
调用父类的成员变量
成员方法的继承
特点
- 子类只能继承父类的非私有成员方法
- 子类重写方法的权限修饰符要大于等于其父类,即父类方法是默认权限修饰,则子类方法可以是默认修饰符或者public修饰符
成员方法的调用原则(就近原则)
方法名相同,调用顺序为:子类方法 -> 父类方法
子父类方法之重写与重载
方法重写:子类方法与父类方法,不仅方法名相同,而且参数列表相同,返回值也相同,基本上一模一样。只是方法执行代码不同。
方法重载:两个方法方法名相同,而参数列表不同,这是函数的重载,要与成员函数的重写加以区分。
继承的优缺点
继承的优点:
- 提高了代码的复用度,减少了代码冗余
- 提高了代码的可维护性,只用修复父类,则所有子类都修复了
- 增强了类与类之间的联系,也是多态的前提条件
继承的缺点:
- 增加了类之间的耦合性,违反了java设计中的“低耦合,高内聚”原则
this和super总结
关键词 | 含义 | 应用场景 |
---|---|---|
this | 指向调用方法的当前对象 | 1.调用子类的成员变量 2.调用子类的成员方法 3.在子类的构造函数的第一行调用子类的其他构造函数 |
super | 指向当前对象的父类对象 | 1.调用父类的成员变量 2.调用父类的成员方法 3.在子类的构造函数的第一行调用父类的构造函数 |
java关键字之abstract
abstract
可以用来修饰类和方法,被修饰的类和方法分别被称之为“抽象类”和“抽象方法”
概念解析
抽象类:只有含有抽象方法的类,肯定是抽象类;抽象类也可以没有抽象方法,不过这样就失去了抽象类的意义。另外,抽象类中可以含有非抽象方法。抽象类无法实例化,但这并不是因为抽象类没有构造方法,只是因为抽象类中存在抽象函数。
抽象方法:没有方法体,由关键词abstract
修饰的方法叫做抽象方法。
注意:一个类继承了抽象类,需要重写其中的所有抽象方法。否则,可以将其声明为抽象类
抽象类的成员特点
分类 | 特点 |
---|---|
成员变量 | 1. 可以有成员变量 2. 可以有常量 |
成员方法 | 1.可以有抽象方法 2.可以有非抽象方法 |
构造方法 | 有构造方法,需要对抽象类成员变量进行初始化 构造方法会在对象实例化时,自动调用;如果调用失败,则实例化也失败。 |
java关键字之final
final
修饰的类,无法被继承final
修饰的变量为常量,无法修改。且必须初始化,可以显示初始化(即声明时就初始化)或在构造函数初始化final
修饰的成员方法,无法被重写
类无法实例化的两种方法
- 给类加上
abstract
关键字,使其成为抽象类。 - 给类的构造函数加上
private
关键字,使其在new
时,由于构造方法私有不可访问的特性,导致类实例化失败。