有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java这是指在子类对象上调用非重写方法时会发生什么?

考虑下面的代码:

class Person {
    String className = "Person";

    void printClassName () {
        System.out.println("I am " + this.className);
        System.out.println("I am " + this.getClass().getSimpleName());
    }
}

class Employee extends Person {
    // intentionally hiding this field
    String className = "Employee";
}

public class App {
    public static void main(String[] args) {
        Employee raghu = new Employee ();
        raghu.printClassName();
    }

}

我有几个问题

  1. 创建子类的对象时,实际创建了多少个对象?只有一个,通过引入子类中定义的新属性来扩展超类的属性?或者两个,我们可以访问的子类对象和一个超类对象,它的存在对我们来说是隐藏的

  2. 如果创建了两个对象,在子类对象上调用非重写方法时,哪个对象负责?换句话说,this在非重写方法中指的是什么?隐藏的超类对象还是子类对象

  3. 如果#2的答案是超类的隐藏对象,那么为什么上面的代码在printClassName内部为System.out.println("I am " + getClass().getSimpleName());打印"I am Employee"

  4. 如果#2的答案是subclass的对象,那么为什么printClassName内的第一行打印"I am Person"


共 (0) 个答案