Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 477|回复: 0

重写、this疑问

  [复制链接]

该用户从未签到

发表于 2014-10-29 16:11:24 | 显示全部楼层 |阅读模式
3Java金币
public class TestPerson {
        public static void main(String[] args) {
                Student st = new Student();
                st.fun();
        }
}


class Person{
        private void print(){
                System.out.println("Person!");
        }
        public void fun(){
                this.print();
        }
}


class Student extends Person{
        void print(){
                System.out.println("Student!");
        }
}
这段代码中,如果父类Person的print不加private,运行后显示的是Student,加入private,显示的是Person!
这里涉及到this的用法,想不通为什么。请高手指教指教啊!!!

回复

使用道具 举报

该用户从未签到

 楼主| 发表于 2014-10-30 10:39:23 | 显示全部楼层
怎么没人回复么?
我问了群里的朋友,后来结合继承时方法覆盖得出以下结论。
调用fun()时,fun()调用的是Person中的print()方法。
一个方法使用private时,是不能覆写的,上面的两个print()方法是两个不同的方法。所以,会显示出“Person!”
如果去掉private,print()方法覆写,Person中的print()方法被Student中的print()覆盖掉了,fun()调用的还是Person中的print()方法,但是也会显示“Student!”.

如果将fun()方法放入Student中,就会发现无论Person中的private是否存在,显示的都会是"Student!"

不知道以上的是否正确,希望高手指导!
回复

使用道具 举报

该用户从未签到

发表于 2014-11-8 01:03:28 | 显示全部楼层

//这是父类
class Person{      
        private void print(){    //private表示私有的,不能直接访问
                System.out.println("Person!");
        }
        public void fun(){
                this.print();
        }
}

//子类继承父类
class Student extends Person{
        void print(){
                System.out.println("Student!");
        }
}
public class TestPerson {
        public static void main(String[] args) {
                //创建学生对象
                Student st = new Student();
                //通过对象调用方法
                st.fun();
        }  //子类对象访问构造方法前默认访问父类无参构造方法,this是调用本类中的对象,
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2024-3-29 01:52 , Processed in 0.352638 second(s), 32 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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