绕过场阴影

时间:2014-05-30 23:10:57

标签: java inheritance field override shadowing

对于特定程序,我基本上有一个带有几个不同子类的抽象超类。但是,我遇到了字段阴影问题,如下图所示。

abstract class Super {
   String name;

   String getName() {
       return name;
    }
}

现在我创建了每个都有自己的"名称"。

的子类
class Sub extends Super {
    name = "Subclass";
}

但是,创建子类的实例,然后调用继承的方法getName()将因字段阴影而产生null。

是否有一种简单的方法可以避免这个问题,并且允许每个子类都有一个可由继承方法访问的唯一字段?

2 个答案:

答案 0 :(得分:0)

使子字段中的字段可见,并在子类构造函数或子类实例初始值设定项中初始化它。

答案 1 :(得分:0)

您可以尝试这种机制(奖励留给读者,扩展代码直接获取类的名称)。该代码使用Abstract classes构造函数来设置名称。您还可以在Super类中定义setName函数并使用它。

超级(抽象)

package stackShadow;
public abstract class Super {
    String name;

    public Super(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

Shadow1类第一个子类

package stackShadow;
public class Shadow1 extends Super {
    public Shadow1() {
        super("Shadow1");
    }
}

Shadow2类第二个子类

package stackShadow;
public class Shadow2 extends Super {
    public Shadow2() {
        super("Shadow2");
    }
}

测试getName的测试类     package stackShadow;

public class Test {

    public static void main(String[] args) {
        Shadow1 one = new Shadow1();
        Shadow2 two = new Shadow2();

        System.out.println("Name for one is: " + one.getName());
        System.out.println("Name for two is: " + two.getName());

    }

}