2014-03-12 251 views
0

我有主类:Java继承类

public class MainClass{ 
    private int firstVal; 
    private int secVal; 

    public MainClass(int firstVal,int secVal){ 
     this.firstVal=firstVal; 
     this.secVal=secVal; 
    } 
} 

和第二类,扩展此类

public class SecClass extends MainClass{ 
    public SecClass(int firstVal,int secVal){ 
     super(firstVal,secVal) 
    } 
} 

我想知道如何使用这些值firstVal和secVal在SecClass? super.firstVal ?? 或者我必须定义agian的值?

感谢

+1

他们是'private',所以你不能。 –

+0

您可以将其更改为受保护以在子类中访问。您可以在此链接中看到完整的详细信息: http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html。 访问级别 修改\t类\t包\t子类\t世界 公共\tŸ\tŸ\tŸ\tŸ 保护\tŸ\tŸ\tŸ\tň 没有修改\tŸ\tŸ\tň\tň 私人\tÿ\t N \t N \t N –

回答

3

只是将它们标记为protected代替private

public class MainClass { 
    protected int firstVal; 
    protected int secVal; 
    //rest of your class... 
} 

如果你想保持他们作为private,你可以为这个领域的getter和setter方法并标记这些方法为publicprotected,具体取决于您想要/需要的可见性:

public class MainClass { 
    private int firstVal; 
    //its value can be retrieved by any class 
    public int getFirstVal() { 
     return this.firstVal; 
    } 
    //its value can only be modified by subclasses of MainClass 
    protected void setFirstVal(int firstVal) { 
     this.firstVal = firstVal; 
    } 
    //similar for the other field... 
} 
0

您需要在您的MainClass中获得获得者和接球手。然后,你可以调用super.getFirstVal()

这些添加到您的MainClass

public int getFirstVal() { 
    return firstVal; 
} 

public int getSecVal() { 
    return secVal; 
} 
0

您可以用getter和setter方法做到这一点。但是,如果您认为子类应该能够访问它们,请声明firstValsecVal受保护。然后,你可以在子类中直接访问它们:

subclassInstance.firstVal 
subclassInstance.secVal 

私有变量是不允许任何人或任何与此有关的子类进行访问。受保护的变量是相似的,除了子类可以访问它们。您仍然可以调用构造函数super();让父构造函数初始化他们自己的变量是一个好习惯。

0

如果它们在同一个包中,只需删除private访问修饰符。如果不是,则需要添加protectedpublic(非常糟糕的主意)。一般来说,你不应该把你的领域暴露给这样的子类,因为你不知道他们将如何处理它们。

1

下面是关于publicprivateprotected范围表,从那里你就会明白为什么private variable不能在child class使用,(从this post

Modifier | Class | Package | Subclass | World 
————————————+———————+—————————+——————————+——————— 
public  | ✔ | ✔ | ✔  | ✔ 
————————————+———————+—————————+——————————+——————— 
protected | ✔ | ✔ | ✔  | ✘ 
————————————+———————+—————————+——————————+——————— 
no modifier | ✔ | ✔ | ✘  | ✘ 
————————————+———————+—————————+——————————+——————— 
private  | ✔ | ✘ | ✘  | ✘