继承
- 使用继承优化设计,方便修改代码 减少代码量。
- 类是对象的抽象,继承是对某一批类的抽象,同时也能更好的提高代码的复用性!
- 关键字:extands 的意思是 “扩展”,子类是父类的扩展。不同的叫法:超类、父类、基类、子类、派生类。
- 继承是代码重用的一种方式 ,将子类共有的属性和行为放到父类中。通过继承可以简化类的定义,实现代码的重用。
- 子类继承父类的成员变量和成员方法,但不继承父类的构造方法
- 多继承,就是为了实现代码的复用性,却引入 了复杂性,使得系统类之间的关系混乱。
- java中的多继承,可以通过接口来实现。
- java中叧有单继承 ,没有像c++那样的多继承。多继承会引起混乱,使得 继承链过于复杂,系统难于维护。
- 如果定义一个类时,没有调用extends,则它的父类是:java.lang.Object。
super 关键字
- super是直接父类对象的引用。(super关键字是来访问父类的成员)
- super只能出现在子类的方法和构造方法中
- 可以通过super来访问父类中被子类覆盖的方法或属性。
- super不能访问父类的private成员
- 普通方法: 没有顺序限制。可以随便调用。
- 构造函数中: 任何类的构造函数中,若是构造函数的第一行代码没有显式的调用super(...);那么
- Java默认都会调用super();作为父类的初始化函数。 所以你这里的super();加不加 都无所谓。
- 使用super关键字, super代表父类对象。
- 在子类构造方法中调用且 必须是第一句。
- super和this不能同时出现在构造方法中
- super和this都不能再static方法中
-
super,构造方法第一句 总是:super(…)来调用父类对应的构造 方法。
修饰符
可以修饰属性和方法,本类、同包、子类可以访问。
多重继承关系初始化的顺序: 父类属性→父类构造方法→子类属性→子类构造方法。
方法重写:在子类中可以根据需要对从基类中继承来的方法进行重写。
重写方法必须和被重写方法具有相同方法名称、参数列表和返回 类型。
重写方法不能使用比被重写方法更严格的访问权限。(由于多态)。
方法重写的规则:
方法名相同、参数列表相同、
返回值类型相同或者是其子类;
访问权限不能严于父类。
抽象方法(abstract)
abstract 也可用于方法—抽象方法
抽象方法没有方法体
– 抽象方法必须在抽象类里
– 抽象方法必须在子类中被实现,除非子类是抽象类
在一个普通类中 有抽象方法 则这个类也必须更改为 抽象类。一个抽象方法中可以有 普通类。
final
final:最终的,结束的;
例:private final int year=10;就是最终的属性不能在修改。同样方法和类使用 final 也不可再修改。
使用
final
修饰引用型变量,变量的值是固定不变的, 而变量所指向的对象的属性值是可变的。
Object
Object类是所有类的父类
一个类如果没有使用extends显性的继承另外一个类,
那么这个类就继承自Object类。
Object类是所有Java类的根基类
toString方法:
重写:toString方法:
默认返回:包名+类名+@+哈希码
可以重写!
equals()方法:
对象的比较—==和equals()
==:
比较两基本类型变量的值是否相等
比较两个引用类型的值即内存地址是否相等,即是否指向同一对象。
equals() :
– 两对象的内容是否一致
自定义类须重写equals(),否则其对象比较结果总是false。
例
– object1.equals(object2) 如:p1.equals(p2)
▪ 比较所指对象的内容是否一样
▪ 是比较两个对象,而非两个基本数据类型的变量
– object1 == object2
如:p1==p2
▪ 比较p1和p2的值即内存地址是否相等,即是否是指向同一对象。
父类方法的重写:
“==”:方法名、形参列表相同。
“≤≤”:返回值类型和异常类型,子类小于等于父类。
“≥”:访问权限,子类大于等于父类