java - 子类java中具有相同名称的属性

标签 java oop

public class HelloWorld
{
  protected int num = 12;

  public void callme()
  {
    System.out.print(this.num);
  }

  public static void main(String[] args)
  {
    HelloWorld myObject1 = new HelloWorld();
    myObject1.callme();
    OtherClass myObject2 = new OtherClass();
    myObject2.callme();
  }
}


public class OtherClass extends HelloWorld
{
  protected int num = 14;
}

为什么输出是“1212”而不是“1214”?在 php 中它是“1214”,但在 java 中不是 viceversa。这背后的逻辑是什么?

最佳答案

callme()方法只定义在基类中,因此return this.num;返回基类的实例变量。

Java 中没有重写实例变量。

如果您要在子类中覆盖该方法,通过添加

public void callme()
{
    System.out.print(this.num);
}

对于OtherClassmyObject2.callme();会返回14,因为它会执行子类的callme()方法, 从而访问子类的实例变量。

关于java - 子类java中具有相同名称的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47739999/

相关文章:

java - 如何让表达式语言跨多个jsp页面跳转?

javascript - 从不在 DOM 树中的 jquery 对象复制 Canvas 节点

arrays - matlab中如何从对象数组中获取属性数组

java - 如何调用子类的方法?

java - 在 Java 中将 String[] 的所有元素转换为 int[] 的 Mapreduce 方法?

Java,为 LinkedList 创建插入函数以按升序添加所有插入的元素

java - 有没有办法使用 Perl 或 Java 将内容发布到 Drupal 站点?

java - JSP gzip 输出流

web-applications - 如何设计/规划 Web 应用程序开发?

oop - 为什么go语言的方法有奇怪的语法