Метод Modifiy, вызываемый из расширенного класса - PullRequest
0 голосов
/ 14 октября 2019

У меня есть три класса, и мне нужно изменить первый класс через расширенный второй:

мой первый класс A:

public class A{

private String name;

public void setName(String name) {
        this.name= name;
    }

мой второй класс B

public abstract class B  {
 public void init() {

   A a = new A();
  a.setHost("foo"); 
 }
}

мой третий класс C

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

}

ожидаемый результат, в моем третьем классе:

a.Getname = "bar"

Ответы [ 2 ]

0 голосов
/ 14 октября 2019

Ваш код имеет несколько проблем:

1) Переменная b никогда не объявляется.
2) Переменная a является частной для метода init, поэтому вы не можете получить к ней доступ вне метода init.

Таким образом, решение должно быть таким:

Класс B:

public abstract class B  {

 protected static A a = new A(); // Protected to make it visible to child class
 public void init() {

  a.setHost("foo"); 
 }
}

Класс C:

public class C extends B {
  public static void main(String[] args) {
    a.setName("bar");
    System.out.println(a.getName());  //Output = bar
  }
}
0 голосов
/ 14 октября 2019

вы можете вернуть a в методе init для B, как показано ниже.

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");
   }
}
...