gpt4 book ai didi

java - 使用子类的对象调用父类(super class)中的方法它是如何工作的?

转载 作者:太空宇宙 更新时间:2023-11-04 12:08:56 24 4
gpt4 key购买 nike

class SuperClass{  
public void print(){
System.out.println("I'm super class...");
}
public void someMethod(){
System.out.println("any thing");
}
}

class SubClass extends SuperClass{
@Override
public void print(){
System.out.println("I'm sub class...");
}

public static void main(String args[]){
SuperClass a=new SubClass();
a.print();
a.someMethod();
}
}

a.print() 称为动态绑定(bind),它知道在运行时调用哪个方法并选择子类的方法,因为对象是子类,这是真的吗?

a.someMethod()JVM如何处理这个不在子类中的方法和子类中的对象?

最佳答案

a.print()method overriding 的示例这是 runtime polymorphism 。也就是说,在运行时它决定是调用子类方法还是父类(super class)方法(这里您的 SubClass 方法被调用,因为它被重写并与参数签名匹配)。

如果调用 someMethod(),则您尚未在子类中定义它。这意味着,当您从 Superclass 继承SubClass 时,它会自动获得 someMethod(),因为它是 public。简单来说,SubClass还有someMethod()的定义。这就是 JVM 如何知道要调用哪个方法。

同样在SuperClass a中,变量“a”将存储在堆栈中,而引用将存储在堆中。您已使用 SubClass 的构造函数构造了引用。这意味着堆栈中的变量“a”引用堆中的“SubClass”对象。这就是为什么 'a' 能够调用 someMethod

关于java - 使用子类的对象调用父类(super class)中的方法它是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40063795/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com