1.一般子类继承父类,顺带就会继承了父类的变量,在不重名的情况下。
在父子类的继承关系当中,如果成员变量重命名,则创建子类对象时,访问有两种方式:
①直接通过子类对象访问成员变量:
等号左边时谁,就优先用谁,没有则向上找。
②间接通过成员方法访问成员变量:
父类:
package java继承01;
/**
* @Author: Jason
* @Date: 2019/7/11 9:34
* @Version 1.0
*/
public class Fu {
int numFu = 10;
int num =100;
public void MethodFu(){
//使用的是本类当中的变量 不会向下寻找子类的
System.out.println(num);
}
}
子类 继承 父类:
package java继承01;
/**
* @Author: Jason
* @Date: 2019/7/11 9:34
* @Version 1.0
*/
public class Zi extends Fu {
int numZi = 20;
int num = 200;
public void MethodZi() {
//因为本类当中有num,所以这里用的是本类当中的num
System.out.println(num);
}
}
package java继承01;
/**
* @Author: Jason
* @Date: 2019/7/11 9:33
* @Version 1.0
*/
public class DemoExtends {
public static void main(String[] args) {
Fu fu = new Fu();
System.out.println(fu.numFu);
System.out.println("=============");
Zi zi = new Zi();
//继承了父类的变量 和 自己的变量 共两个
System.out.println(zi.numFu);
System.out.println(zi.numZi);
/**
* 在父子类的继承关系当中,如果成员变量重命名,则创建子类对象时,访问有两种方式:
* ①直接通过子类对象访问成员变量:
* 等号左边时谁,就优先用谁,没有则向上找。
*/
System.out.println(zi.num); //优先子类,200
System.out.println(fu.num); //父类 100
// 重名名的情况下 在哪个类下 就优先哪个类的
System.out.println("②");
/**
②间接通过成员方法访问成员变量:
*/
//这个方法是子类的,优先用子类的,没有的话就向上找
zi.MethodZi(); //200
//这个方法是在父类当中定义的,所以用的父类的变量值
zi.MethodFu(); //100
}
}
显示如:
2.区分子类方法中的三种重名的变量。
本类局部变量: 直接写变量名
本类当中的成员变量:this.成员变量名
父类当中的成员变量:super.成员变量名
package java继承02;
/**
* @Author: Jason
* @Date: 2019/7/11 10:45
* @Version 1.0
*/
public class Fu {
int num = 10; //父类的成员变量
}
package java继承02;
/**
* @Author: Jason
* @Date: 2019/7/11 10:45
* @Version 1.0
*/
/**
* 本类局部变量: 直接写变量名
* 本类当中的成员变量:this.成员变量名
* 父类当中的成员变量:super.成员变量名
*/
public class Zi extends Fu {
int num = 20; //子类当中的成员变量
public void Method(){
int num = 30; //子类当中的局部变量
System.out.println(num); //30 局部变量
System.out.println(this.num); //20 本类的成员变量
System.out.println(super.num); //10 父类的成员变量
}
}
package java继承02;
/**
* @Author: Jason
* @Date: 2019/7/11 10:46
* @Version 1.0
*/
public class DemoExtends {
public static void main(String[] args) {
Zi zi = new Zi();
zi.Method();
}
}