1.0、Java 继承与多态 - 成员变量访问特点

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);
    }
}

- 父类对象只能访问父类中的成员变量;

- 而子类对象既可以访问父类中的成员变量,也可以访问自己类中的成员变量;

 

在父子类的继承关系当中,如果父类和子类的成员变量重名时,子类对象有下面两种访问方式 ->

        方式一:直接通过子类对象访问成员变量 -> 创建对象时等号左边是谁就用谁 例如 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;

 

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就是父类的对象)
    }
}

你可能感兴趣的:(Java继承与多态学习总结,Java,Java-继承与多态,成员变量,成员方法,super,this)