使用B类扩展A类,但在B类方法中无法达到A类的属性

时间:2016-06-14 20:12:13

标签: java attributes extends

所以如果我有两个这样的课程:

public class A extends B{

    public String name = "Alpha"

}

public class B{

    public void revealAName(){
        print(this.name);
    }
}

main(){
A newA = new A();
newA.revealName();
}

在这种情况下,Eclipse表示属性名称不存在。为什么这么说?当我在B类的方法中时,为什么我不能使用A类对象的属性?我该如何解决?

2 个答案:

答案 0 :(得分:1)

首先,应该只有一个公共类应该包含main方法。 其次,您正在使用继承。因此,您必须将基类变量的访问修饰符赋予" protected"为了访问您的子课程。所以,它应该是:

protected String name =" Alpha&#34 ;;

因为"默认"访问修饰符不允许访问子类。来自Flow

 Modifier       Class   Package Subclass World   
 public         Y       Y       Y        Y  
 protected      Y       Y       Y        N  
 no modifier    Y       Y       N        N  
 private        Y       N       N        N 

另一件事,你使用过' this.name'那是试图得到这个名字' B类的变量。这就是它显示错误的原因。

使用继承时,您可以直接使用父类的变量而不使用任何对象引用或者您可以使用" super"对于重复变量名称的对象引用。 controlling access to members of class ..

希望,现在很清楚。

答案 1 :(得分:0)

BA中的属性一无所知,两个类都可以单独编译。

但如果您更改B extends A,则可以从派生类(name)访问B

class A {
    String name = "Alpha";
}

class B extends A {
    public void revealAName(){
        print(this.name);
    }
}
A a = new A();
a.name; // OK
a.revealName(); // not OK

B b = new B();    
b.name; // OK
b.revealName(); // OK

另请参阅Oracle tutorial on inheritance