子类重写父类方法的疑问?

hyj19831027 2010-06-24 04:48:26

class Person{

private void print(){
System.out.println("父类的print方法");
};
public void fun(){
this.print();
}
}
class Student extends Person{
void print(){
System.out.println("子类的print方法");
}
}
public class Demo{
public static void main(String args[]){
Student s = new Student();
s.fun();

}
}


最近在学习Java,学到继承关系时遇到这样的问题,以上代码运行结果是:“父类的print方法”。我的问题是,
1.父类的private权限的方法就一定无法被子类重写了吗?
2.这段代码的运行结果为什么不是“子类的print方法”?在主方法中实例化的是子类对象,而且调用的fun方法中是this.print(),this不就是代表当前对象吗,也就是Student对象,那么不应该调用的是子类的print方法吗?
望各位坛友不吝赐教!先谢谢各位了!
...全文
529 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
任付江 2010-06-25
  • 打赏
  • 举报
回复
好啊!对于初学者来说,理解好概念很重要!
1,private是私有的意思,在java中使用了private修饰字,只有,只有,是只有它自己能访问,其它的不管是子类还是谁,都不能被访问!
2,第一个问题和第一个问题是同一个问题。第二个问题,关键字this是值对象自己,但是作用有很多种,在这里是指对象作为参数,调用print(),月就是说,fun()不是fun(),而是print()。
sxg263 2010-06-25
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 wve 的回复:]
子类无法访问父类的private方法
[/Quote]
在子类中再定义的方法如果和父类中的某个private方法同名,不会对父类中的方法进行覆盖。子类中的方法是个新方法与父类无关。

其实,楼主是不了解类服务器端编程和类客户端编程。
是这样的:负责类服务器端编程的人员负责写类;类客户端程序员通过继承类服务器端的类来进行应用。
类服务器端写完类后,进行编译,生成 aaa.class文件(也可以是别的class文件);交给客户端使用;
客户端是得不到类的源码的。客户端能看到的只有aaa.class中的public 和protected的变量和方法.
客户端看不到里面的private方法和变量。如果非要引用,也会报错,因为服务器端未授权。

也就是:你去老李家借钱,老李把钱借给了你,至于这钱老李从哪弄的,你就不要知道了
fantasy471503202 2010-06-25
  • 打赏
  • 举报
回复
以我个人看法回答一下楼主的疑问。

首先加上private的方法,子类是绝对不能访问的,只有父类自己可以访问,除非在父类的内部写上的内部类可以访问private修饰的方法,这是为了java安全角度考虑。

第二个问题,java在实例化子类时,会上溯寻找子类的父类,一直到Object类,凡是寻找到的父类是都要被实例化的,子类对象调用了一个方法,在子类中此方法并没有被实现覆盖,那么会去寻找父类中是否有此方法,如果发现此方法,那么实例化后的父类对象即会调用此方法,此方法中出现了this.method()方法,那么this此时当然指的是此时父类对象,调用的当然是父类中的方法。
不知楼主还有疑问没?
皮皮虾向前冲 2010-06-25
  • 打赏
  • 举报
回复
继承看样你学的真不好。子类继承父类,子类只包涵父类public的属性方法。。
zy2419 2010-06-25
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 jsxymgh 的回复:]

继承看样你学的真不好。子类继承父类,子类只包涵父类public的属性方法。。
[/Quote]

gaoxiang519 2010-06-25
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 jsxymgh 的回复:]

继承看样你学的真不好。子类继承父类,子类只包涵父类public的属性方法。。
[/Quote]

protected的属性和方法也包括,这个关键字就是为子类准备的.......
hyj19831027 2010-06-25
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 zyc2009 的回复:]
调子类的print()?
直接s.print()啊
[/Quote]
哦,对对!感谢,我太傻了,这都没想到,唉..
NFSP 2010-06-25
  • 打赏
  • 举报
回复
调子类的print()?
直接s.print()啊
bingmeng_1102 2010-06-25
  • 打赏
  • 举报
回复
楼上大侠们说了很多。
其实自己debug跟一下,就知道哪个是哪个了。
再自己试着改改,看了看有什么不一样的地方。
hyj19831027 2010-06-25
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 fantasy471503202 的回复:]
以我个人看法回答一下楼主的疑问。

首先加上private的方法,子类是绝对不能访问的,只有父类自己可以访问,除非在父类的内部写上的内部类可以访问private修饰的方法,这是为了java安全角度考虑。

第二个问题,java在实例化子类时,会上溯寻找子类的父类,一直到Object类,凡是寻找到的父类是都要被实例化的,子类对象调用了一个方法,在子类中此方法并没有被实现覆盖,那么会去寻找父类……
[/Quote]

感谢您的解释!确实还有一点疑惑,看您的解释我是这样理解的,是不是执行Student s = new Student();这句代码后,父类和子类的对象各实例化了一个,然后执行s.fun()这句,因为子类中没有fun方法,所以这时是使用刚才实例化了的父类的对象去调用父类的fun方法,而子类的对象根本没用,所以在fun中的this就是指父类的对象了,所以调用的是父类的print方法。如果是这样的话,我还想问一下,那要是就想调用子类的print方法需要怎样做呢(在不修改父类print方法的private权限前提下)?谢谢了!
wve 2010-06-24
  • 打赏
  • 举报
回复
子类无法访问父类的private方法
wanglian 2010-06-24
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 fsj123fsj123 的回复:]

在Student 类中没有fun方法,就只能调用父类的fun方法,而父类fun中的this指的是父类。
[/Quote]
private 方法不能被重写 !初始化子类是先调用父类的构造函数然后再调用子类的构造函数,但Student s = new Student(); s.fun();是先在子类Student中找fun()方法,子类中没有fun()方法就去父类中找,父类中this对应的父类对象自己,所以就调用了private的fun()
fsj123fsj123 2010-06-24
  • 打赏
  • 举报
回复
在Student 类中没有fun方法,就只能调用父类的fun方法,而父类fun中的this指的是父类。
hyj19831027 2010-06-24
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 jspwoai 的回复:]
this代表对象本身 !你把private 改成public就可以调用
[/Quote]
那这个本身指的是Person类的对象还是Student类的对象呢?

wyxyzw 2010-06-24
  • 打赏
  • 举报
回复
一切都因为父类那个private!
JSPwoai 2010-06-24
  • 打赏
  • 举报
回复
this代表对象本身 !你把private 改成public就可以调用
hyj19831027 2010-06-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 valen_jia 的回复:]
子类没有重写fun方法,所以调用的是父类的,父类里用的是this,就表示调用这个类里的的print方法
[/Quote]
那么这个this是代表Person类的对象了,可是那要怎么才能调到子类的print方法呢
hyj19831027 2010-06-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 izard999 的回复:]
1:子类都无法访问父类的private方法何来的重写呢?
2:LZ去补补课吧.! 你先了解此时的当前对象是什么? 先有父类对象才有子类对象.! 这个this再怎么样也到不了子类上面去的
[/Quote]
你的意思是此时的this代表的不是Student的对象而是Person的对象了
valen_jia 2010-06-24
  • 打赏
  • 举报
回复
子类没有重写fun方法,所以调用的是父类的,父类里用的是this,就表示调用这个类里的的print方法
izard999 2010-06-24
  • 打赏
  • 举报
回复
1:子类都无法访问父类的private方法何来的重写呢?
2:LZ去补补课吧.! 你先了解此时的当前对象是什么? 先有父类对象才有子类对象.! 这个this再怎么样也到不了子类上面去的
加载更多回复(2)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧