1.继承
也就算说除了private修饰的方法或变量都可以继承
父类A
public class A {
public int i;
public void print1(){
System.out.println("===print1===");
}
private int j;
private void print2(){
System.out.println("===print2===");
}
}
子类B
public class B extends A{
private int k;
public void print3(){
System.out.println(i);
print1();
}
}
出现错误,无法继承父类私有变量
看构造函数是否共同实现可以得出
public A() {
System.out.println("A");
}
public B() {
System.out.println("B");
}
结果:
由此可以得出先通过A父类的实现,再到B子类的实现,是由二者共同完成的
单继承
class C extends A{}
多层继承
class B extends A{}
class C extends B{}
特别的:Object类是Java中所有类的祖宗类,也就是说所有的类都是间接或直接的与Object类相关 是子类或孙子类
就是把父类中要重写的方法,在子类中把父类的方法名字,参数重写一遍,方法具体实现部分重写,如:
父类A
public void print111(int a, int b){
System.out.println("111");
}
子类B
@Override
public void print111(int a, int b){
System.out.println("666");
}
重写后调用执行得,而不是111
就近原则 活用this super
public class B extends A{
public B(){
this(1);
System.out.println("B()");
}
public B(int b){
super();
System.out.println("B(int b)");
}
}
无参实例化
public static void main(String[] args) {
B b = new B();
}
结果:
解析:无参实例化首先调用的是“子类B中无参的构造函数”,第一行是this(1)即”子类B中的有参构造函数“,进入到B(int b),顺序执行到super()即”父类A的无参构造函数“打印出”A()“,然后执行打印语句,打印出"B(int b)",this(1)执行完毕,最后在子类B无参构造函数中执行打印语句,打印出"B()"。
PS: this(...)和super(...)都只能放在构造器的第一行 不写默认在子类构造器中写上super()
此处有待补充