一个父类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的话全部方法和属性都用得了。。好像和声明的类型有关系,具体是怎么样的大佬可以讲一下吗,或者告诉我是哪方面的知识点我自己去补。。
p.drink()其实是可以运行的,只是编译器给你一个错误。因为p的类型是Person引用,Person引用没有drink()方法,所以编译器不让你这么用。
p的类型是Person引用,值是Man对象引用,而p能调用什么方法访问什么属性,取决于p的类型,而不是p的值。所以不能调用p.drink()。