Java关系b/w父函数和子函数调用机制

Java关系b/w父函数和子函数调用机制,java,polymorphism,Java,Polymorphism,我试图理解父函数和子函数调用机制之间的关系,但没有得到这一点 class Parent { Parent() { greeting();//as we are not calling this on any object, by default it has Parent's greeting method } void greeting() { System.out.println("Greeting Parent"); } }

我试图理解父函数和子函数调用机制之间的关系,但没有得到这一点

class Parent {
    Parent() {
        greeting();//as we are not calling this on any object, by default it has Parent's greeting method
    }

    void greeting() {
        System.out.println("Greeting Parent");
    }
}

public class SuperConstructor extends Parent {
    public SuperConstructor() {
   //super(); //i know this
        greeting();
    }

    void greeting() {
        System.out.println("Greeting Child");
    }

    public static void main(String[] args) {
        new SuperConstructor();
    }
}
输出:
问候孩子,为什么?这里的情况如何?
问候孩子


输出(我预期)
问候家长(原因:因为方法存在于家长类中)

问候孩子

问候孩子
视为输出的原因是
超级构造函数
中的
问候()
方法覆盖了
父类
问候()
方法。当一个方法重写另一个方法时,它将完全替换is。请看下面解释覆盖与隐藏的帖子:

之所以将
问候孩子
视为输出,是因为
超级构造函数中的
问候()
方法覆盖了
父类的
问候()
方法。当一个方法重写另一个方法时,它将完全替换is。请看下面解释重写与隐藏的帖子:

这是因为父级正在调用重写的方法。将其设为私有,您将得到您期望的结果,私有方法是不可重写的。

这是因为父级正在调用被重写的方法。将其设为私有,您将得到您期望的结果,私有方法是不可重写的。

继承规则:如果子类中存在重写方法,它将始终首先执行!和父对象的方法将被忽略

那么,这里发生了什么?

>这个
新的超级构造函数()将首先执行

>这将创建一个新的子类

>请记住,如果子构造函数没有调用超级构造函数,那么JVM将在子类构造函数中隐式添加一个。这将是执行的第一行

因此,您的子构造函数将调用
Super()
。您的父构造函数将执行
greeting()

>之后,子构造函数的执行将正常进行。下一行是
greeting(),这将再次执行子对象的方法。为什么?因为我们的继承规则是这样说的。

继承规则:如果子类中存在重写方法,它将始终首先执行!和父对象的方法将被忽略

那么,这里发生了什么?

>这个
新的超级构造函数()将首先执行

>这将创建一个新的子类

>请记住,如果子构造函数没有调用超级构造函数,那么JVM将在子类构造函数中隐式添加一个。这将是执行的第一行

因此,您的子构造函数将调用
Super()
。您的父构造函数将执行
greeting()

>之后,子构造函数的执行将正常进行。下一行是
greeting(),这将再次执行子对象的方法。为什么?因为我们的继承规则是这样规定的。

谢谢!但我不能得到继承的规则。我在寻找推理…事情是如何运作的internally@Naroji例如,如果父级有方法
x()
,而子级有相同的方法。然后,在任何正常情况下,都将调用child方法。如果要调用同一父方法,则需要使用
super.x()
。您必须阅读更多关于继承的所有规则。谢谢!但我不能得到继承的规则。我在寻找推理…事情是如何运作的internally@Naroji例如,如果父级有方法
x()
,而子级有相同的方法。然后,在任何正常情况下,都将调用child方法。如果要调用同一父方法,则需要使用
super.x()
。您必须阅读更多关于继承的所有规则。