一 继承关系
1.1 继承关系调用总结
1.具有子父类继承关系,子类的有参构造和无参构造,都会默认在首行调用super(),都会默认调用父类的构造方法。
2.具有子父类继承关系,子类和父类具有相同的成员变量,直接访问成员变量,则是父类中的成员变量。
3.通过F f=new Zi()的方式,调用父类的方法(构造方法和普通方法),在方法中调用this.A();this指的是子类对象;A()方法被子类重写过,则调用的子类的A()方法;没有被重写过,则调用父类中的A()方法。
1.2 案例1 没有重写父类方法
1.父类: 定义show()方法;info()方法
public class F {
int x=10;
public F() {
System.out.println("父构造");
x=11;
this.show();
}
public void show(){
System.out.println("我是父类");
}
public void info(){
System.out.println("父类 info...");
this.show();
}
}
2.子类:继承F类,没有重写父类show()方法
public class Z extends F{
int x=20;
public Z() {
this.show();
System.out.println("=======");
}
public Z(String str){
x=40;
System.out.println("str:"+str);
}
public void show2(){
System.out.println("我是子类");
}
}
3.调用
public class TestS {
public static void main(String[] args) {
F f =new Z("123");
f.show();
// f.info();
System.out.println("x:"+f.x);
}
}
1.查看到 这里的this,指的是子类Z的对象
2.执行结果:
父构造
我是父类
str:123
我是父类
x:11
1.具有子父类继承关系,子类的有参构造和无参构造,都会默认在首行调用super(),都会默认调用父类的构造方法。
2.具有子父类继承关系,子类和父类具有相同的成员变量,直接访问成员变量,则是父类中的成员变量。
1.3 案例2 重写父类方法的方法
1.父类:定义show()方法,被子类重写
public class F {
int x=10;
public F() {
System.out.println("父构造");
x=11;
this.show();
}
public void show(){
System.out.println("我是父类");
}
public void info(){
System.out.println("父类 info...");
this.show();
}
}
2.子类: 重写父类中的show()方法
public class Z extends F{
int x=20;
public Z() {
this.show();
System.out.println("=======");
}
public Z(String str){
x=40;
System.out.println("str:"+str);
}
public void show(){
System.out.println("我是子类");
}
}
3.调用
public class TestS {
public static void main(String[] args) {
F f =new Z("123");
f.show();
// f.info();
System.out.println("x:"+f.x);
}
}
1.查看到 这里的this,指的是子类Z的对象
2.执行结果:
父构造
我是子类
str:123
我是子类
x:11
结论:
1.具有子父类继承关系,子类的有参构造和无参构造,都会默认在首行调用super(),都会默认调用父类的构造方法。
2.具有子父类继承关系,子类和父类具有相同的成员变量,直接访问成员变量,则是父类中的成员变量。
3.通过F f=new Zi()的方式,调用父类的方法(构造方法和普通方法),在方法中调用this.A();this指的是子类对象;A()方法被子类重写过,则调用的子类的A()方法;没有被重写过,则调用父类中的A()方法。
1.4 父子类中成员变量相同,访问逻辑
当子类,父类具有相同成员变量时,操作成员变量的方法被子类重写,或者是子类自己独有的,则访问的变量则是子类中的成员变量,否则是父类中的成员变量