本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

父级中的方法如何调用子级中的方法?

发布于2022-06-22 16:48     阅读(386)     评论(0)     点赞(8)     收藏(0)


我有一个父类和一个子类。

父类有两个子类覆盖的方法。

这是一个例子:

public class May11 extends May11Parent
{
    public void m1()
    {
        super.m1();
        System.out.println("3");
    }

    public void m2()
    {
        super.m2();
        System.out.println("4");
    }

}

public class May11Parent
{
    public void m1()
    {
        System.out.println("1");
        m2();
    }

    public void m2()
    {
        System.out.println("2");
    }

}

然后我有一个带有父引用的子对象(子类中的主要方法)。我执行m1()我知道去m1()孩子的身体。孩子打电话给家长。家长打电话m2()神奇m2()的是,孩子和父母的两个方法都被执行了。

我的想法是m2()被解雇的是父母。如果不是父母,那就是孩子!

我认为这可能与多态性有关,但我什至尝试了一个带有子引用的子对象,并且事情是一样的。我不明白发生了什么事。有任何想法吗??

这是一个不错的屏幕截图:

亲子怪癖


解决方案


这里没有魔法。

第一的:

引用该对象的变量的类型仅限制在该位置哪些方法是“可见的”。实现仍然由被引用的对象实例决定。

(想象一下您的子类(May11)正在指定一个附加m3()方法。从具有父类类型(May11Parent)的变量中,这将是不可调用的。)

第二:

调用顺序可以很容易地从代码中确定:

最初,假设您的对象引用绑定到变量var
( typeMay11或 type May11Parent

  1. 调用var.m1()
    this 调用May11.m1(),因为对象实例是一个May11类。
  2. m1()正在调用super.m1()
    这执行May11Parent.m1()
  3. May11Parent.m1()正在打印“ 1
  4. May11Parent.m1()调用m2()
    由于对象实例是一种May11类型,因此正在执行May11.m2()
  5. May11.m2()正在打电话super.m2()(这是May11Parent.m2()
  6. May11Parent.m2()正在打印“ 2 ”并返回
  7. back at May11.m2()next 语句正在打印“ 4 ”并返回
  8. 回到May11Parent.m1()这里正在返回
  9. back at May11.m1()next statement 正在打印“ 3 ”并返回

所有这些都源于应用解析重载方法的规则。



所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:http://www.javaheidong.com/blog/article/460835/7da9c8964243629f7a82/

来源:java黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

8 0
收藏该文
已收藏

评论内容:(最多支持255个字符)