Java抽象类字段覆盖
我有一个抽象类,应该实现一个公共字段,该字段是一个接口或另一个抽象类。
像这样的东西:
public abstract class GenericContainer { public GenericChild child;
}
public abstract class GenericChild {
public int prop1=1;
}
public abstract class SpecialChild extend GenericChild {
public int prop1=2;
}
现在我有另一个专门的类容器:
public abstract class SpecialContainer extends GenericContainer { public SpecialChild child=new SpecialChild(); //PAY ATTENTION HERE!
}
Java的让我编译这个,和我想象的领域child
中SpecialContainer
被自动重载领域child
的GenericContainer
......这些问题是:我是对这个?孩子的自动“超载”会发生吗?
而且,更重要的问题是,如果我还有另一个这样的课:
public class ExternalClass { public GenericContainer container=new SpecialContainer();
public int test() {
return container.child.prop1
}
}
test()
会返回1还是2?我的意思是GenericContainer
容器字段prop1
将称为通用字段还是特殊字段?还有,如果特殊的prop1被声明为String,该怎么办(是的,在这种情况下,java也允许我编译)?
谢谢!
回答:
它并没有覆盖任何内容,您只是在当前类范围内隐藏了原始字段。如果将变量与子类型一起使用,您仍然可以访问原始属性。例:
abstract class GenericContainer { public GenericChild child;
}
abstract class GenericChild {
public int prop1=1 ;
}
class SpecialChild extends GenericChild {
public int prop1=2;
}
class SpecialContainer extends GenericContainer {
public SpecialChild child;
}
public class Main {
public static void main( String ... args ) {
GenericContainer container = new SpecialContainer();
container.child = new SpecialChild();
System.out.println( container.child.prop1 );
SpecialChild child = (SpecialChild) container.child;
System.out.println( child.prop1 );
}
}
先打印1,然后打印2。
从SpecialChild
你也可以去使用了一个级别super
:
class SpecialChild extends GenericChild { public int prop1=2;
public int getOriginalProp1() {
return super.prop1;
}
}
以上是 Java抽象类字段覆盖 的全部内容, 来源链接: utcz.com/qa/417262.html