关于继承的小问题。。

一个父类Person类嘛

public class Person {
    int sex=1;
    void work() {
        System.out .println(sex);
    }
}

一个子类Man类嘛

public class Man extends Person {
    String sex1="man";
    void drink() {    
        System.out .println(sex1);    
    }
}

然后然后

public class S {
    public static void main(String[] args) {
        Person p=new Man();
                Man m=new Man();

        p.work();    
         
        m.work();
        m.drink();

        System.out .println(p.sex);
        
                System.out .println(m.sex);
                System.out .println(m.sex1);

    }
}

这里声明类型是Person时为啥不能p.drink();呀。。p.sex1也用不了。。声明类型变成Man的话全部方法和属性都用得了。。好像和声明的类型有关系,具体是怎么样的大佬可以讲一下吗,或者告诉我是哪方面的知识点我自己去补。。

阅读 1.4k
1 个回答

p.drink()其实是可以运行的,只是编译器给你一个错误。因为p的类型是Person引用,Person引用没有drink()方法,所以编译器不让你这么用。

p的类型是Person引用,值是Man对象引用,而p能调用什么方法访问什么属性,取决于p的类型,而不是p的值。所以不能调用p.drink()。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题