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的让我编译这个,和我想象的领域childSpecialContainer被自动重载领域childGenericContainer......这些问题是:我是对这个?孩子的自动“超载”会发生吗?

而且,更重要的问题是,如果我还有另一个这样的课:

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

回到顶部