面向对象的三大特征:封装、继承、多态
继承:主要解决的问题就是“共性抽取”。
设计原则:对于已投入使用的类,尽量不要修改。推荐定义一个新的类,来重复利用其中的共性内容,并添加改动新内容。
继承特点:1、子类可拥有父类中所有非私有的属性与方法;2、子类也可拥有自己独有的属性与方法;3、子类通过关键字extends来继承父类
格式:public class 子类名称 extends 父类名称 { ......}
注:1、在继承关系中,若成员变量重名,则子类创建对象时,有两种访问方式。
直接通过子类对象访问成员变量:等号左边是谁,就优先用谁,没有则向上找。 如:Zi zi = new Zi(); zi.num;这里用的是优先子类,若子类没有num则找父类的
间接通过成员方法访问成员变量:该方法属于谁,就优先有谁,没有则向上找;若方法也重名,则等号左边是谁就优先用谁。 如:Zi zi = new Zi(); zi.method(); 这里优先用子类的。
2、若成员方法重名,访问规则:创建对象的是谁,就优先用谁,如果没有则向上找。
注意:无论成员变量或方法,若没有都是向上找父类,不会向下找子类。
当父类和子类的成员变量、子类的局部变量都重名的情况下,使用不同方式访问。
重写:在继承关系中,父子的方法名一样,参数列表也一样。
重写(override)与重载(overload)的区别:
重写:方法名一样,参数列表也一样。也叫覆盖、覆写
重载:方法名一样,参数列表不一样。
重写注意事项:
1、必须保证父子类之间方法名一样,参数列表也一样。
@Override:该注解写在方法前面,可用来检测方法是不是正确覆盖,提高代码正确性。不写也不影响,只要重写正确。
2、子类方法的返回值必须小于等于父类的返回值范围。 (返回值范围可根据引用类型继承关系判断)
扩展:java.lang.Object类是所有类的基类,及祖宗类。
3、子类方法的权限必须大于等于父类方法的权限修饰符。
扩展:public > protected > (default) > private。 注:default不是关键字,是什么都不写,留空就好。
super关键字:可理解为代表父类对象,通过该关键字可实现父类方法重写简化 。
继承中的构造方法:
1、子类构造方法当中有一个默认隐含的“super();”调用,所以一定是先调用父类的构造方法,后执行子类的构造方法。
2、子类构造方法可以通过super关键字调用父类重载构造方法。
3、super的父类构造调用,必须是子类构造方法的第一个语句。一个子类构造不能多次super父类构造。
总结:子类必须调用父类的构造方法,不写则默认隐含的super();写了则用指定的super调用,super只能有一个,且还必须是第一个。
super关键字的三种用法:
this关键字的三种用法:
this与super内存图解:
继承的三个特点:
1、Java语言是单继承的。即一个类的直接父类只能有唯一一个。
2、Java语言可以多级继承。如:A继承B,B又继承C,...,即A的间接父类C
3、一个子类的直接父类是唯一的,但一个父类可以拥有多个子类。