1. 什么是继承
子类继承父类的特征和行为,使得子类具有父类的各种属性和方法。或子类从父类继承方法,使得子类具有父类相同的行为。
特点:在继承关系中,父类更通用、子类更具体。父类具有更一般的特征和行为,而子类除了具有父类的特征和行为,还具有一些自己特殊的特征和行为。
在继承关系中。父类和子类需要满足is-a的关系。子类是父类。
表示父类和子类的术语:父类和子类、超类和子类、基类和派生类,他们表示的是同一个意思。
Java中只支持单根继承,即一个类只能有一个直接父类。
子类可以继承父类:
继承public和protected修饰的属性和方法,不管子类和父类是否在同一个包里
继承默认权限修饰符的属性和方法,但子类和父类必须在同一个包里
子类不可以继承父类:
private成员、构造方法、不在同包的父类中默认修饰符修饰的成员
2. 继承语法
编写父类
class Pet {
//公共的属性和方法
}
编写子类,继承父类
class Dog extends Pet {
//子类特有的属性和方法
}
3. 子类访问父类成员(super关键字)
访问父类构造方法,使用super关键字,super代表父类对象。
super();
super(name);
访问父类属性
super.name;
访问父类方法
super.print();
super只能出现在子类的方法和构造方法中
super调用构造方法时,只能是第一句
super不能访问父类的private成员
4. 继承条件下的构造方法
继承条件下构造方法的调用规则:
子类构造方法没有通过super显式调用父类的有参构造方法 ,也没通过this显式调用自身其他构造方法,系统默认调用父类的无参构造方法。
子类构造方法通过super显式调用父类的有参构造方法,执行父类相应构造方法,而不执行父类无参构造方法。
子类构造方法通过this显式调用自身的其他构造方法,在相应构造方法中应用以上两条规则。
5. super和this的区别
6. 访问修饰符
图4-1 访问修饰符总结
7. 方法重写
方法重写的规则:
■方法名相同
■参数列表相同
■返回值类型相同或者是其子类
■ 访问权限不能严于父类
■父类的静态方法不能被子类覆盖为非静态方法,父类的非静态方法不能被子类覆盖为静态方法
■子类可以定义与父类同名的静态方法,以便在子类中隐藏父类的静态方法(注:静态方法中无法使用super)
■父类的私有方法不能被子类覆盖
■不能抛出比父类方法更多的异常
8. 方法重写和方法重载的区别
9. Object类
Object类是所有类的父类。
public class Pet extends Object {
}
Object类被子类经常重写的方法
图6-1 Object类被子类经常重写的方法
Object类的equals()方法
比较两个对象是否是同一个对象,是则返回true。
操作符==
简单数据类型,直接比较值。如1==2
引用类型,比较两者是否为同一对象
(1)Object类的equals()方法与==没区别。
(2)当有特殊需求,如认为属性相同即为同一对象时,需要重写equals()。
(3)Java.lang.String重写了equals()方法,把equals()方法的判断变为了判断其值。
10. 抽象类
抽象类,即类无法实例化。
public abstract class Pet {
}
abstract也可用于方法——抽象方法
Ø 抽象方法没有方法体。
Ø 抽象方法必须在抽象类里。
Ø 抽象方法必须在子类中被实现,除非子类是抽象类。
public abstract void print();
11. final用法
final让类无法被继承
public final class Penguin extends Pet {
//…
}
final让方法无法被重写
public final void print () {
//…
}
final让属性值无法被修改
public class Penguin {
final String home ="南极";// 居住地}