java - 如何从父级的方法访问子级的继承成员

标签 java class oop virtual abstract

如何访问子类在其父类(super class)中声明的字符串变量?

我有类似这样的类(class):

public class Parent {
  public void display() {
    // displays A
  }
}

public class Child1 extends Parent {
}

public class Child2 extends Parent {
}

Parent p1 = new Child1();
Parent p2 = new Child2();

p1.display(); // Currently displaying parent value of A
p2.display(); // Currently displaying parent value of A

如何确保在这个 display() 中,p1p2 使用自己的 A 值,而不是父类?

最佳答案

(我正在编辑问题并回答问题;如果我误解了问题,请道歉。)

只要您不使用静态成员,所需的行为就是正常行为。在父类(super class)中将所需成员定义为 protected;这三个类中任何一个的每个实例都将使用自己的值。

public class Parent {
  protected string name;

  public Parent() {
    name = "Parent's value";
  }

  public void setName(string newValue) {
    name = newValue;
  }

  public void display() {
    System.out.println(name);
  }
}

public class Child1 extends Parent {
  public Child1() {
    name = "Child1's value";
  }
}

public class Child2 extends Parent {
  public Child2() {
    name = "Child2's value";
  }
}

public static void main() {
  new Parent().display();
  new Child1().display();
  Child2 c2 = new Child2();
  c2.display();
  c2.setName("New name!");
  c2.display();
}

这会产生预期的输出:

Parent's value
Child1's value
Child2's value
New name!

关于java - 如何从父级的方法访问子级的继承成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33703946/

相关文章:

Eclipse 中的 java.lang.ClassNotFoundException : com. mysql.jdbc.Driver 即使引用了 mysql-connector jar

Java持久化: Cannot add or update a child row: a foreign key constraint fails

java - java Play! 返回结果后如何执行代码框架?

Java重写抽象方法设计策略

java - Selenium 图像的大小

C++ 类输出和排序

php - 将数据连接传递给 PHP 类/方法的推荐方法?

javascript - 从 React.js 中的另一个类组件调用函数

class - 如何在类助手中捕获类的事件?

javascript - 将元素移动到光标位置会被记录,但不会应用位置更改