如何在java的继承函数中使用局部变量的值?

时间:2015-06-16 02:27:57

标签: java inheritance extends

我有两个A和B类

public class A {
    public String a = "hey";

    public void printA() {
        System.out.println(a);
    }

public class B extends A{
    public String a = "Jude";
}

我需要做什么才能使以下行的输出为Jude

B object = new B();
object.printA();    //This should output Jude

4 个答案:

答案 0 :(得分:0)

您无法从超类访问子类字段。但是你可以在子类中更改它:

public class B extends A {
    B() {
        this.a = "Jude";
    }
}

这样您就不会声明新字段,而是更改现有字段的值。请注意,extends A是指定BA的子类所必需的。

或者,您可以考虑使用方法而不是字段:

public class A {
    public String getA() {
        return "hey";
    }

    public void printA() {
        System.out.println(getA());
    }
}

public class B extends A {
    @Override
    public String getA() {
        return "Jude";
    }
}

注意,Java中的“变量”术语通常应用于方法中声明的局部变量。你说的是“场”,而不是“变量”。

答案 1 :(得分:0)

只需将你的a声明改为this.a就好了。

public class B extends A{
    B(){
        super();
        //Could hardcode this.a to "Jude" here if you want.
    }

    B(String word){
        super();
        this.a = word;
    }
}

a已经从超类A为B定义,所以你需要使用"这个"访问它。

您可以像这样使用

B object = new B("Jude");
object.printA(); //"Jude"

答案 2 :(得分:0)

无法覆盖字段。方法可以;改用方法:

public class A {
    public String getA() {
        return "hey";
    }
    public void printA() {
        System.out.println(getA());
    }
}

public class B extends A {
    public String getA() {
        return "Jude";
    }
}

这就是全部。如果在这些类之外没有调用getA(),则cincdider将其设为protected

答案 3 :(得分:-2)

Java®语言规范,Java SE 8版

  

如果类声明了具有特定名称的字段,那么   据说该领域的声明隐藏任何和所有可访问的   超类中具有相同名称的字段的声明,和   班级的超级接口。

不确定如果我需要为观众进一步解释它,但你不能“在java的继承函数中使用局部变量的值”,为什么?见上文。