修改从扩展 class 调用的方法
Modifiy method called from extended class
我有三个 class,我需要修改第一个 class 到扩展的第二个 :
我的第一个 class 答:
public class A{
private String name;
public void setName(String name) {
this.name= name;
}
我的第二个class B
public abstract class B {
public void init() {
A a = new A();
a.setHost("foo");
}
}
我的第三个classC
public class C extends B {
// I want to use the method setName() of the a declared in class B
b.init.a.setName("bar");//compile error, I tried several syntax I don't know how to do it
}
预期输出,在我的第三个 class 中:
a.Getname = "bar"
你可以在 B 的初始化方法中 return a,如下所示。
public A init() {
A a = new A();
a.setHost("foo");
return a;
}
然后你可以像下面这样在C中设置值
public class C extends B {
public setNameinA() {
B b = new B();
b.init().setName("bar");
}
}
您的代码有多个问题:
1) 从未声明变量 b。
2) 变量a对方法init是私有的,所以你不能在init方法之外访问它。
所以解决方案应该是这样的:
Class乙:
public abstract class B {
protected static A a = new A(); // Protected to make it visible to child class
public void init() {
a.setHost("foo");
}
}
Class C:
public class C extends B {
public static void main(String[] args) {
a.setName("bar");
System.out.println(a.getName()); //Output = bar
}
}
我有三个 class,我需要修改第一个 class 到扩展的第二个 :
我的第一个 class 答:
public class A{
private String name;
public void setName(String name) {
this.name= name;
}
我的第二个class B
public abstract class B {
public void init() {
A a = new A();
a.setHost("foo");
}
}
我的第三个classC
public class C extends B {
// I want to use the method setName() of the a declared in class B
b.init.a.setName("bar");//compile error, I tried several syntax I don't know how to do it
}
预期输出,在我的第三个 class 中:
a.Getname = "bar"
你可以在 B 的初始化方法中 return a,如下所示。
public A init() {
A a = new A();
a.setHost("foo");
return a;
}
然后你可以像下面这样在C中设置值
public class C extends B {
public setNameinA() {
B b = new B();
b.init().setName("bar");
}
}
您的代码有多个问题:
1) 从未声明变量 b。
2) 变量a对方法init是私有的,所以你不能在init方法之外访问它。
所以解决方案应该是这样的:
Class乙:
public abstract class B {
protected static A a = new A(); // Protected to make it visible to child class
public void init() {
a.setHost("foo");
}
}
Class C:
public class C extends B {
public static void main(String[] args) {
a.setName("bar");
System.out.println(a.getName()); //Output = bar
}
}