继承
说到继承就想到了我们常说的子承父业,java中的继承(extends)也就是运用了这种思想,这样可以减少代码的重复率以及方便维护。super与this的区别
super | this |
---|---|
父类对象的引用 | 本类对象的引用 |
super.成员变量(或成员方法) 调用父类成员变量(或成员方法) | this.成员变量(或成员方法) 调用本类成员变量(或成员方法) |
super(...) 调用父类构造方法 | this(...) 调用本类构造方法 |
final、private关键字
final | private |
---|---|
被修饰的类不能被继承 | 被修饰的方法不能被继承 |
被修饰的方法不能被继承 | |
被修饰的变量赋值完后,不能被重新赋值 | 被修饰的变量不能被继承 |
代码演示
父类public class Extend{
public Extend() {
System.out.println("我是父类构造方法");
}
public void show(){
System.out.println("我是父类show方法");
}
final int i=100;
String x="我是父类常量";
private String p="我是父类私有变量";
private void my(){
System.out.println("我是父类私有方法");
}
}
子类
public class Extend2 extends Extend{
public Extend2() {
// super();系统隐藏的,你也可以写出来,这就是为什么父类构造函数会先执行的原因
System.out.println("我是子类构造方法");
}
@Override
public void show() {
System.out.println("我是子类重写的show方法");
}
}
测试类
public class Text {
public static void main(String[] args) {
Extend2 e=new Extend2();//创建Extend对象e
System.out.println(e.x);
System.out.println(e.i);
// System.out.println(e.p);这句话会出错
e.show();
// e.my();这句话会出错
}
}
结果
我是父类构造方法
我是子类构造方法
我是父类常量
100
我是子类重写的show方法
通过结果可以看出实例化子类时,回会先对父类构造函数进行实例化,其次是子类构造函数,重写过后的函数,结果也会是重写的内容,常量也被继承下来了,但是私有方法变量却不能被调用。