学习目标:
掌握继承的优点和实现
掌握继承下构造方法的执行过程
掌握子类重写父类方法
掌握final修饰属性、方法和类
学习内容:
继承:追求程序/代码的可重用性
可重用:一次编写,多个地方都可以使用,节省代码,提高效率
理解:
将多个类中共同/公有的属性和方法,抽取到另一个类中,那么这个类就可以成为多个 类 的父类
同时保留在即特有的属性和方法,(龙生九子,各有不同)
java 的单继承和多实现(亲爹只能有一个,干爹可以有很多)
java 只支持单继承,也就是说一个类只能有一个父类!(有血缘关系的只能有一个)
后续会讲到接口,java支持多实现接口,也就是说一个类可以有多个干爹
继承下构造方法的执行过程:
必须先创建父类的对象;也就是说先执行父类构造方法,再执行子类构造方法
简单理解/例子:
现有爹才能有儿子
哪个当爷的,不是从当孙子过来的呢?
关于继承下的程序执行原理:
1.构造方法:参考上述
2.执行子类对象调用的属性和方法
当子类中有这个属性或者方法时,就执行子类自己的
当子类中没有这个属性和方法时,就执行父类的
若子类中和父类中都没有这个属性和方法,就只能说明写错了!
关于继承下的程序执行原理:
1.构造方法:参考上述
2.执行子类对象调用的属性和方法
当子类中有这个属性或方法时,就执行子类自己的,
当子类中没有这个属性和方法时,就执行父类的
若子类中和父类中都没有这个属性和方法,那就只能说明写错了!
子类不能继承父类哪些资源?
父类私有的属性和方法不能继承
子类与父类不同包时,子类也不能继承父类默认访问修饰符修饰的属性和方法
不能继承父类的构造方法
super关键字
(1)super代表父类对象
(2)super如果出现在子类构造方法中,必须是第一句
(3)使用super关键字也不可以访问父类中定义为private的属性和方法
方法的重写(override):
父类不能直接使用子类中特有的属性和方法,如果从父类继承的方法不能满足子类的需求,
则在子类中可以对父类的同名方法进行重写,以符合需求。
规则:
首先必须要有继承关系——————子类重写父类的方法
重写方法和被重写方法必须具有相同的方法名
重写方法和被重写方法必须具有相同的参数列表
重写方法的返回值类型必须和被重写方法的返回值相同或者是其子类
重写方法不能缩小被重写方法的访问权限
当子类重写了父类的方法之后,那么子类再调用这个方法时,就只执行子类中的方法实现,而不再执行父类中的方法实现,
要想既使用父类中的方法实现,又同时使用子类中的方法实现,可以在子类重写的方法中使用super.方法来实现
Object类:是所有类的父类,如果一个类没有使用extends,那么这个类就默认继承与Object类
所有类都可以使用Object中的一些方法,子类经常重写Object中的一些方法,比如:toString、equals等,
重点!!!——————equals方法
Object中equals方法比较两个对象是否相同,实际上就是使用的"=="进行比较的,也就是说Object的equals方法默认比较两个对象的地址是否相同
同样也就是说,若一个类没有重写Object的equals方法,那么他们比较equals也是在比较地址,而不是比较值/内容
但是String方法重写了equals方法,使用的是判断两个字符串的值是否相等,若相等返回true,否则返回false,所以说String的equals方法是比较两个字符串的值是否相同
但是面试题问:“==和equals有什么区别”时,不能直接说==比较地址,equals比较值,需要先说equals是默认使用Object中的方法,
本质上就是在比较地址,但是像Arrays、String等类重写了Object的equals方法,内部的实现是比较的值是否相等