java继承简述
1.继承的概述
继承是Java中一般到特殊的关系,是一种子类到父类的关系。
例如:学生类继承了人类。 猫类继承了动物类。
被继承的类称为:父类/超类。
继承父类的类称为:子类。
继承的作用:
“可以提高代码的复用”,相同代码可以定义在父类中。
然后子类直接继承父类,就可以直接使用父类的这些代码了。(相同代码重复利用)
子类更强大:子类不仅得到了父类的功能,它还有自己的功能。
继承的特点:
子类继承了一个父类,子类就可以直接得到父类的属性(成员变量)和行为(方法)了。
1).单继承:一个类只能继承一个直接父类。
2).多层继承:一个类可以间接继承多个父类。
3).一个类可以有多个子类。
4).一个类要么默认继承了Object类,要么间接继承了Object类,Object类是Java中的祖宗类!!
子类不能继承父类的内容:
子类继承父类,子类就得到了父类的属性和行为。但是并非所有父类的属性和行为等子类都可以继承。
子类不能继承父类的东西:
子类不能继承父类的构造器:子类有自己的构造器。(没有争议的)
有争议的观点(拓展):
子类是否可以继承父类的私有成员(私有成员变量,私有成员方法)?
我认为子类是可以继承父类的私有成员的,只是不能直接访问而已。
以后可以暴力去访问继承自父类的私有成员~~~
子类是否可以继承父类的静态成员?
我认为子类是不能继承父类的静态成员的,
子类只是可以访问父类的静态成员,父类的静态成员只有一份可以被子类共享访问。共享并非继承。
小结:
继承是子类到到父类的一种关系。
子类继承了一个父类,子类就可以直接得到父类的属性和行为了。
在Java中继承是 “is a” 的关系。Cat extends Animal:猫是一个动物。
在Java中,子类是更强大的,子类不仅继承了父类的功能,自己还可以定义自己的功能。
2.继承后成员变量的访问特点
就近原则:
子类有找子类,子类没有找父类,父类没有就报错!
如果一定要申明访问父类的成员变量可以使用:super.父类成员变量。
super指父类引用。
小结:
子类访问成员变量的原则:就近原则。
如果一定要访问父类的成员变量可以使用super关键字。
3.继承后成员方法的访问特点
就近原则:
子类有找子类,子类没有找父类,父类没有就报错。
小结:
子类对象优先使用子类已有的方法。
4.继承后方法的重写
方法重写的概念:
子类继承了父类,子类就得到了父类的某个方法。
但是子类觉得父类的这个方法不好用或者无法满足自己的需求。
子类重写一个与父类申明一样的方法来覆盖父类的该方法,子类的这个方法。
就进行了方法重写。
静态方法和私有方法是否可以被重写(拓展语法)
都不可以!
方法重写的校验注解:
@Override
Java建议在重写的方法上面加上一个@Override注解。
方法一旦加了这个注解,那就必须是成功重写父类的方法,否则报错!
@Override优势:可读性好,安全,优雅!!
方法重写的具体要求:
1).子类重写方法的名称和形参列表必须与父类被重写方法一样。
2).子类重写方法的返回值类型申明要么与父类一样,要么比父类方法返回值类型范围更小。
3).子类重写方法的修饰符权限应该与父类被重写方法的修饰符权限相同或者更大。
4).子类重写方法申明抛出的异常应该与父类被重写方法申明抛出的异常一样或者范围更小!
方法重写的规范:
1).加上@Override注解。
2).建议“申明不变,重新实现”。
小结:
方法重写是子类重写一个与父类申明一样的方法覆盖父类的方法。
方法重写建议加上@Override注解。
方法重写的核心要求:方法名称形参列表必须与被重写方法一致!!
建议“申明不变,重新实现”。
5.继承后构造器的特点
继承后子类构造器的特点:
调用子类构造器的时候,子类的构造器一定会先调用父类的无参数构造器再执行自己的构造器。
为什么子类构造器一定要先调用父类无参数构造器:
1).子类的全部构造器的第一行默认有一个super()调用父类无参数构造器。
2).调用子类构造器初始化子类对象的时候,必须先调用父类构造器去初始化继承自父类的成员。
小结:
子类构造器默认一定会先调用父类的无参数构造器再执行自己。
可以在子类构造器中通过super(...)根据参数选择调用父类的构造器,以便调用
父类构造器初始化继承自父类的数据。