JavaSE基础之多态中成员的访问

当一个父类引用持有子类对象时,对于成员(变量及方法)的访问是有不同的,具体如下:

public class MainClass {
    public static void main(String[] args) {
        Father f = new Child();
        System.out.println(f.num);
        f.hello();
    }
}

public class Father {
    int num = 10;

    public void hello(){
        System.out.println("Hello, I'm father class");
    }
}

public class Child extends Father {
    int num = 20;

    public void hello() {
        System.out.println("Hello, I'm child class");
    }
}

一、成员变量

f.num的输出结果是10

因为在child对象中,会有专门的一块空间来存储父类的数据,父类引用访问成员变量只能访问到这片空间。

Child对象

当我们使用Child child = new Child();来创建对象时,child.num就访问的是this中的num

总结:父类引用访问变量,编译看左边(父类),运行看左边(父类)。

二、 成员方法

f.hello();方法调用输出结果是Hello, I'm child class

虽然在编译时,f仍然只能看见super的空间,但是在程序运行时,f调用的确是子类的hello()方法,这也叫做动态绑定。

总结:父类引用访问方法,编译看左边(父类),运行看右边(父类)。

以上是以前的知识点加深记忆,所以并没有写的很全面。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、Java 简介 Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计...
    子非鱼_t_阅读 4,240评论 1 44
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,740评论 18 399
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young阅读 3,869评论 1 10
  • Win7下如何打开DOS控制台? a:开始--所有程序--附件--命令提示符 b:开始--搜索程序和文件--cmd...
    逍遥叹6阅读 1,610评论 4 12
  • 今天有幸来到领袖班学友儿子的升学宴现场,看着现场的夏张两家的亲朋好友,再看众多赢家学友的满面笑容,这份幸福一进场就...
    好彩妹阅读 545评论 0 0