继承
继承
我们定义了两个类
1 | class Person{ |
有很多重复代码,这是没必要的。这时候可以用上继承这个特性
1 | class Person{ |
可以看到,我们第二个类都没声明任何东西,就可以使用父类的方法以及属性
通过关键字extends可以使子类继承父类的方法和属性
class 子类名 extends 父类名{}
无法被访问的字段
如果父类里面有private所修饰的字段,子类是无法访问和使用的
这个时候改用protected来修饰字段就可以了。
super
子类在继承父类的时候,子类不会继承父类的构造方法,用super可以解决这个问题
父类如果没有定义无参的构造函数,子类定义自己的构造函数时,会报错
因为构造方法,如果没有明确的调用父类的构造方法,编译器隐式的加上super(),可是我们这里父类并没有定义无参的构造方法,所以就造成了错误
super更像是子类与父类的接口,这里解决方案就是super(a,b)
还是有个问题
如果我需要在子类的构造方法中去初始化子类自己的变量
1 | class Person2 extends Person { |
但是又不想去初始化从父类继承过来的那个变量,这里不用super就会报错。
最优解还是父类定义一个无参的构造方法,最方便。
不想被继承的类
final这个功能很强大,不仅是将变量变成常量,而且还能修饰别的
类,方法,字段如果被final修饰了,则不能被其他子类所继承
1 | public final int a(){} //不让被继承的方法 |
可以在构造函数里面初始化被final修饰的字段
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 朝辞!


