继承
/*
!!!什么是继承?继承后有啥特点?
1.继承就是用extends关键字,让一个类和另一个类建立起一种父子关系。
2子类可以继承父类非私有的成员。
!!!带继承关系的类,Java会怎么创建它的对象?对象创建出来后,可以直接访问哪些成员?
1.带继承关系的类,java会用类和其父类,这多张设计图来一起创建类的对象。
2.对象能直接访问什么成员,是由子父类这多张设计图(!!!)共同决定的,这多张设计图对外暴露了什么成员,对象就可以访问什么成员。
!!!使用继承有啥好处?
1. 减少了重复代码的编写,提高了代码的复用性。(如:将多个子类中重复的代码放入父类中继承)
继承相关的注意事项:
1.权限修饰符
1.就是用来限制类中的成员(成员变量、成员方法、构造器、代码块...)能够被访问的范围。
2.private 在本类中
缺省 在本类中 同一个包下的其他类里
protected 在本类中 同一个包下的其他类里 任意包下的子类(!!!)里
public 在本类中 同一个包下的其他类里 任意包下的子类(!!!)里 任意包下的任意类里
2.单继承、Object类
1.java是单继承类的:一个类只能继承一个直接父类,但是支持多层继承。
2.Object类是java所以类的祖宗类。我们写的任何一个类,其实都是object的子类或子孙类。
3.方法重写
1.子类可以重写一个方法名称、参数列表一样的方法,去覆盖父类的这个方法,这就是方法重写。(声明不变,方法重写)
2.注意:重写后,方法的访问,java会遵循就近原则。
3.重写小技巧:使用 Override 注解,更安全且可读性更好。
4.私有方法(因为该方法无法继承)、静态方法(与类相关而不与实例相关联,以及不适用于多态的概念)不能被重写。
5.应用场景:子类重写Object类的toString()方法,以便返回对象中的内容。
4.子类中访问其他成员的特点:
1.在子类方法中访问其他成员(成员变量、成员方法),是依照就近原则的。
先子类局部范围找。
然后子类成员范围找。
然后父类成员方法找,如果父类范围还没有找到则报错。
2.如果子父类中,出现了重名的成员,会优先使用子类的,如果想在子类的方法中使用父类的成员怎么办?
可以使用super关键字,指定访问父类的成员:super.父类成员变量/父类成员方法。
5.子类构造器的特点:
1.子类的全部构造器,都会先调用父类的构造器,再执行自己的。
因为创建子类的对象的时候需要参考子类和父类的设计图,先调用父类的构造器初始化相关数据后,
才能再回到子类的构造器,进而把所有数据都初始化。
2.默认情况下,子类全部构造器的第一行代码都是super(),它会调用父类的无参构造器。
如果父类没有无参构造器,则我们必须在子类构造器的第一行手写super(...),指定去调用父类的有参构造器,
常见的应用场景:为对象中包含父类这部分的成员变量赋值。
3.this(...)的作用:在构造器中调用本类的其他构造器。
4.this(...)和super(...)的使用注意:都必须放在构造器的第一行。
*/