当前位置: 首页 > 面试题库 >

Java抽象类字段覆盖

楚弘益
2023-03-14
问题内容

我有一个抽象类,应该实现一个公共字段,该字段是一个接口或另一个抽象类。

像这样的东西:

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;
    }

}


 类似资料:
  • 问题内容: 我有一些看起来像这样的代码: 并且我想覆盖模型中字段的默认值,使其适用于该模型。 我已经浏览了一些相关的Django文档,并仔细查看了模型对象,但是我很难找到合适的位置进行此操作。有什么建议? 问题答案: 你实际上可以按照以下步骤进行操作: 我已经做了一两次。之所以有效,是因为Message上的字段与BaseMessage上的字段是不同的实例。但是,我怀疑是否建议使用它;-)它在很大程

  • Java 语言提供了两种类,分别为具体类和抽象类。前面学习接触的类都是具体类。这一节介绍一下抽象类。 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,那么这样的类称为 抽象类。 在 Java 中抽象类的语法格式如下: 其中,abstract 表示该类或该方法是抽象的;class_name 表示抽象类

  • 本小节我们将学习 Java 中的抽象类,你将了解到抽象类的概念和特点,抽象类在程序设计时的应用场景,什么是抽象方法,抽象方法有什么特点,如何声明一个抽象方法等内容。 1. 概念和特点 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。 值得注意的是,一个抽象类不能直接实例化,但类的

  • 问题内容: 因此,我一直在为编程类编写抽象作业,但遇到了问题。我现在的目标是能够使用抽象,然后能够使用矩形和椭圆形绘制一个简单的城市,例如矩形建筑物或灯柱上的椭圆形灯。 我在编译时收到的错误是:MyTestApp.Rectangle不是抽象的,并且不会覆盖MyTestApp.Shape中的抽象方法drawEllipse(java.awt.Graphics)。该错误显示在类Shape下方的“矩形扩展

  • 我得到了tasteScore值=7.0。它的意思是double(超级类),但我想打印tastescore的int值。如何访问Bread类tasteScore而不是Food类?

  • 我的班级等级如下: 并尝试将DTO映射到实体 地图如下: 我在详细信息字段中收到带有A或B的DTO,这是在调试器中检查的。但是模型制图者投掷 无法实例化目标组织的实例。包裹基础确保该组织。包裹Base有一个非私有的无参数构造函数。 我尝试使用显式提供程序(没有用于此映射): 我还尝试像这样实现自定义转换器(也没有执行): 模型映射器似乎没有对字段使用这个类型映射,只对hierarhy的根使用。在这