2012-10-16 199 views
-2

考虑以下超类和子类对,如何访问超类成员?访问具有相同变量名称的不同类型的Super成员

class Super { 
    Number aNumber; 
} 

class Subbie extends Super { 
    Float aNumber; 
} 
+1

我强烈建议你去通过Inheritance'的'基础。你可以从这个教程开始: - http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html –

+0

来吧 - 问题不是那么糟糕......它是公平的,指向教程 - 但是-3? – dngfng

+1

@dngfng:这显然是一个作业问题的直接帖子,没有OP的任何努力。 – geoffspear

回答

0

您可以访问超级会员super.aNumber,只要它在子类的实例。

0

鉴于该属性没有可见性修饰符,它被假定为包私有。 Subbie将只能访问SuperaNumber,如果它们在同一个包中。

如果是这样,您可以像这样访问它:super.aNumber。注意super这里是一个关键字,隐式指向超类,并且与名为Super的超类没有任何关系。

class Super { 
    Number aNumber; 
} 

class Subbie extends Super { 
    Float aNumber; 
    public Number getNumberFromSuper() { 
     return super.aNumber; 
    } 
} 

我建议采取对优秀的Java读取在线教程,例如:

0

您可以定义不同的关键字字段被称为访问修饰符(检查最后的链接以获得关于此主题的详细解释),每个e定义访问/使用的范围。我将专注于这个领域的解释。

Public:每个人都可以访问。此访问修饰符是定期与方法一起使用,而不是与字段一起使用。在Java中,鼓励使用getset方法来访问字段的值并分别对其进行更改。您可以访问一个字段是这样的:

AClass c = new AClass(); 
c.publicField = 3; //Setting a value in a field, int in this case 
int sum = c.publicField + 4; //Obtaining the value of publicField to use it 

私人: Definining一个字段作为私人使其可见只类本身,这意味着一类的边界之外没有人能够看到这个领域。 Java中常见的类通常具有私有字段和访问器(get & set方法)。

public class AClass { 

    public int publicField; 
    private String privateField = "Can't see me!"; 

    public String getPrivateField() { 
     return privateField; 
    } 

    public void setPrivateField(String newValue) { 
     privateField = newVaule; 
    } 

} 

getter和setter让你控制访问您的私人领域,允许,如果你需要它,你要更新该字段的值或返回值之前,准备在一个特定的字段之前执行任何你想要的逻辑。

受保护:只有同一包中的类和类的子类才能访问使用此关键字定义的字段。在您的情况下,Subbie可以访问Superprotected字段,并且与Super相同的程序包中的任何其他类也可以访问这些字段。

禁止访问修饰符:这是您当前的情况,您的问题的答案强烈依赖于您的类的结构。如果他们在同一个包中,则可以从Subbie访问Super的字段。否则,如果Subbie位于另一个包中,则将无法访问该字段。该字段被引用为Package-Private

你可能要检查一些相关的文章:

  1. Inheritance in Java
  2. Controlling the Access to Members of a Class
相关问题