1.0、Java 继承与多态 - 成员变量访问特点
话不多说直接上代码理解 ->
先创建一个父类Father,一个子类Child
父类:Father.java 文件如下所示 ->
public class Father {
int f = 600;
int num = 6000;
public int getFatherNum() {
return num;
}
}
子类:Child.java 文件如下所示 ->
public class Child extends Father {
int c = 900;
int num = 9000;
public int getChildNum() {
return num;
}
}
父类子类对象获取成员变量的权限 ->
public class Test { public static void main(String[] args) { //父类对象只能访问父类中的成员变量 Father father = new Father(); System.out.println(father.f); //子类对象既可以访问父类中的成员变量,也可以访问自己类中的成员变量 Child child = new Child(); System.out.println(child.f); System.out.println(child.c); } }
- 父类对象只能访问父类中的成员变量;
- 而子类对象既可以访问父类中的成员变量,也可以访问自己类中的成员变量;
文章来源地址https://www.toymoban.com/news/detail-403279.html
在父子类的继承关系当中,如果父类和子类的成员变量重名时,子类对象有下面两种访问方式 ->
方式一:直接通过子类对象访问成员变量 -> 创建对象时等号左边是谁就用谁 [ 例如 Child child = new Child 那么 child.成员变量 访问的就是 Child 类中的成员变量,因为创建对象 child 时他的左边是 Child 类 ] ;如果找不到该成员变量,则向当前该类的父类中找;
方式二:间接通过成员方法访问成员变量 -> 该方法属于谁就优先使用谁的;如果找不到该成员变量,则向当前该类的父类中找;
方式一:通过对象去获取重名的成员变量时 ->
public class Test { public static void main(String[] args) { //当访问父类子类中相同名称的成员变量时,优先使用创建该对象左边的类中的成员变量 Child child = new Child(); System.out.println(child.num); //输出结果为 9000 } }
当访问 父类 子类 中相同名称的成员变量时,优先使用创建该对象左边的类中的成员变量(也就是用 Child 类中的 num;因为创建 child 对象时左边的类的是 - Child;
如果该类中找不到该成员变量,则默认再从该类的父类中找寻该成员变量;
方式二: 通过成员方法获取重名的变量时 ->
public class Test { public static void main(String[] args) { //子类对象既可以访问父类中的成员方法,也可以访问自己类中的成员方法 Child child = new Child(); child.getChildNum(); //获取得到的是 - 9000 child.getFatherNum();//该方法虽然使用child对象获取的但是该方法仍然属于Father类,所以获取得到的是 - 6000 } }
创建一个子类对象 child ,然后用 child 通过成员方法获取 num 成员变量的值 ->
- getChildNum() 方法是属于 Child 类的,所以获取得到的是 9000;
- getFatherNum() 方法虽然是通过 child 对象去调用的,但是该方法仍然是属于 Father 父类的方法,所以获取得到的是成员变量是 6000;文章来源:https://www.toymoban.com/news/detail-403279.html
this、super 关键字 -> 区分 局部变量、类变量、父类变量
public class Father {
int num = 30;
}
public class Child extends Father {
int num = 20;
public void testMethod() {
int num = 10;
System.out.println(num);//num = 10,局部变量
System.out.println(this.num);// num = 20,本类的成员变量(this就是本类的对象)
System.out.println(super.num);// num = 30,父类的成员变量(super就是父类的对象)
}
}
到了这里,关于1.0、Java 继承与多态 - 成员变量访问特点的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!