我在这里有一个超级和子类,我正在尝试学习预告。
class Demo1{
int x=10;
void show(){
System.out.println(this.x);
System.out.println(this.s);
}
}
和Child类:
class Demo2 extends Demo1{
int ashish=200;
String s="Nana";
public static void main(String... args){
Demo1 d=new Demo2();
d.show();
}
}
在这里,我正在尝试打印String s
。为什么它显示变量不存在的编译错误?
据我所知,在upcasting期间..创建的对象实例具有子类的所有数据成员,并且它的引用被赋予父类变量,那么为什么this
没有引用Demo2的数据成员? / p>
答案 0 :(得分:2)
class Demo1{
int x=10;
void show(){
System.out.println(this.x);
System.out.println(this.s);
}
}
Demo1
必须能够作为独立单位存在。如果您创建了Demo1
的实例,它本身就没有任何s
,所以这将是荒谬的。
abstract class Demo1{
int x=10;
abstract String s();
void show(){
System.out.println(this.x);
System.out.println(this.s());
}
}
class Demo2 extends Demo1 {
String s = "foo";
public String s() { return s; }
}
这明确表明Demo1
有一个"洞" - 实现详细信息子类型需要填写,告诉它如何获取s
。
答案 1 :(得分:0)
超类对任何子类的成员(字段和方法)一无所知。因此,不允许在超类中使用s
字段,因此会出现编译器错误。