今天是来到天亮的第12天,今天学习了继承、final、super、覆写、多态等知识。
继承(extends):
继承是从已有类中,派生出新的类,新的类拥有父类的属性和行为,并且还能扩展新的属性和行为,一个类只能有一个父类,但可以有很多子类,继承可以传递。继承提高了代码的效率,避免了代码的重写,提高代码重用性。语法:[修饰符] class 子类名 extends 父类名{ }
super:
super跟this类比,super代表父类。作用:在成员,构造方法中,区分子类和父类同名的数据,默认子类,想用父类用super.xxx(变量名);在子类构造方法中,调用父类构造方法,也是跟this差不多,在构造方法第一行,二者只能取一,通过参数选择具体那个构造函数。不能出现在静态语句中。
子类构造方法和子类实实例语句块,子类实实例语句块创建一次对象,就执行一次。super语句执行了才算创建对象,所以父类子类构造方法和子类实实例语句块先执行。
构造方法私有化之后,就不能再被继承了
final:
final : 是修饰符,表示最后的,最终的,不可更改的 . final修饰 没有默认值
类 : final修饰的类 不能被继承
变量 : 没有默认值,不能二次赋值,必须显式赋值(不能有不赋值的情况)
方法 : final修饰的成员方法不能被覆写
final 修饰的静态变量,一般称为常量,
final修饰对象,对象地址不能变,但对象属性可以变。
Override(方法覆写):
当父类功能满足不了子类需求时需要进行方法覆写。
条件:有继承关系,父子方法名一致,参数列表一致,返回值一致,不能有更宽泛的异常,不能有更低的访问权限。目的是使功能越来越强,使用范围越来越广,错误越来越少。
@Override是源码注解,在编译的时候,判断该方法是否是覆写的方法,防止写错,仅此而已,生成class之后该注解就会被去掉。如果不加,比如方法名写错了,那么最多也就是两个方法,不会报错,但是加上@Override就会进行校验操作
多态:
多态是面向对象的重中之重,多态就是里氏替换原则的一种体现 能使用父类的地方就一定可以使用子类。多态 就是 父类引用指向子类对象,通过父类创建的一个引用类型变量,找到了子类的对象,有变量的地方,就能发生多态,并且多态发生在赋值的时候 多态的缺点 : 丢失子类特有的属性
多态三种形式1.直接多态,2.形参实参3.返回值形态
多态进行属性调用 :
1 父类没有的,都调用不了(因为多态缺点,丢失子类特有的属性)
2 父类有的,子类没有的,执行父类
3 父类和子类都有,除了成员方法执行子类,其他全部执行父类(因为只有成员方法可以覆写)
多态父类引用指向子类对象,通过子类的对象找到子类对父类的方法覆写,并调用。