吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1154|回复: 13
收起左侧

[讨论] 请大神进来看看,小弟才疏学浅

[复制链接]
grekevin 发表于 2021-5-10 11:02
输出结果为什么是这样的,实在是想不通?菜鸟求助
[Java] 纯文本查看 复制代码
class Person {
        public void eat() {
                System.out.println("吃饭");
        }

        private void speak() {
                System.out.println("我是一个人");
        }

        public void show() {
                speak();
                eat();
        }
}

public class Student extends Person {
        @Override
        public void eat() {
                System.out.println("学生应该吃有营养的食物");
        }
        
        public void speak() {
                System.out.println("我是一个学生");
        }

        public static void main(String[] args) {
                Student s = new Student();
                s.show();
        }
}

/*
输出结果:
我是一个人
学生应该吃有营养的食物
*/

免费评分

参与人数 1热心值 +1 收起 理由
xzl9552547 + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

wslans 发表于 2021-5-10 11:08
两个函数不一样,一个public,一个private
fengchuan 发表于 2021-5-10 11:16
along6 发表于 2021-5-10 11:17
把父类的speak方法写成公共的,然后在子类重写就好了,还有,下次发帖请说明下你想输出的结果是啥样的,不然靠猜吗
 楼主| grekevin 发表于 2021-5-10 11:20
wslans 发表于 2021-5-10 11:08
两个函数不一样,一个public,一个private

这个我知道,可以讲的再详细点吗?比如在函数show()内部,怎么确定是调用父类的speak方法还是调用子类的speak方法,底层原理是什么?JVM怎么确定调用那个方法?对子类来说,speak不算是重写了父类的speak方法,算是子类特有的方法,但是起码子类是有speak方法的。如果子类重写了speak父类的speak方法,就会调用重写后的speak方法。
 楼主| grekevin 发表于 2021-5-10 11:21
本帖最后由 grekevin 于 2021-5-10 11:22 编辑
along6 发表于 2021-5-10 11:17
把父类的speak方法写成公共的,然后在子类重写就好了,还有,下次发帖请说明下你想输出的结果是啥样的,不 ...

重写speak我理解,我的代码中这样我就搞不通了;结果在代码的最下面,不好意思,开头没明确表明
 楼主| grekevin 发表于 2021-5-10 11:24
fengchuan 发表于 2021-5-10 11:16
@Override重写了 Person 类里的eat方法

谢谢,eat方法的调用我知道;speak方法的调用搞不通;不是子类也有speak方法,为什么不调用?
小柏_Bai 发表于 2021-5-10 11:48


new一个子类对象,会初始化父类,在实例化子类,这时候,eat被重写,speak用为private,不被重写。

调用show方法,子类没有,进入父类查找调用,找到speak因为私有化没有被重写会调用父类方法。

然后调用eat方法。才有你下面的结果

小柏_Bai 发表于 2021-5-10 11:49
你再父类方法写了eat,同等于this.eat()。如果你想调用父类eat,你需要加上super,super.eat().
小柏_Bai 发表于 2021-5-10 11:50
grekevin 发表于 2021-5-10 11:24
谢谢,eat方法的调用我知道;speak方法的调用搞不通;不是子类也有speak方法,为什么不调用?

speak的方法修饰符是private,私有的,private修饰的方法无法被子类重写
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止回复与主题无关非技术内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-15 16:06

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表