对于Java继承的理解,请指教

c04s31602 2009-11-30 11:39:17
看了几天书,对于Java的继承机制有点一头雾水的感觉,现将我的感受和理解说下,请各位大侠们指教
1,派生类继承于基类,那么它就有了基类所有的域和方法,包括private修饰的域和方法
2,在派生类对象中,有一个“子对象”,就是基类的对象,但是不能访问“子对象”的private域和方法
3,对于基类中public方法,在没有覆盖的情况下,使用this.method()和super.method()得到的效果是一样的,那么是不是说它们都是对“子对象”中method()方法的调用?
啃了几天书,就理解这么多了,请指正,如果说的详细些,小弟不胜感激。
...全文
177 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Henry..D 2009-11-30
  • 打赏
  • 举报
回复
1,派生类继承于基类,那么它就有了基类所有的域和方法,包括private修饰的域和方法
嗯,继承是将父类所有的域和方法都继承了,包括私有的,但是却不能使用,所以很多书上是说不能继承似有的方法的!!~
2,在派生类对象中,有一个“子对象”,就是基类的对象,但是不能访问“子对象”的private域和方法
对的,在子类中有一个super对象,可以直接访问父类除了似有的以外方法和属性,以及可通过super(..)调用父类的构造方法。
3,对于基类中public方法,在没有覆盖的情况下,使用this.method()和super.method()得到的效果是一样的,那么是不是说它们都是对“子对象”中method()方法的调用?
如果没有重写从父类继承过来的方法的话,两种调用的效果是一样的,但实质不是一样的,一个是父类的一个是子类自己,两个是独立的!·打个比方,就是父亲的某种能力被他的孩子遗传到了,当孩子解决一个问题时,可以让他的父亲帮他解决或者用自己本身就有的那种遗传下来的能力解决,结果一样,但实质不一样的!·这么说希望可以清楚点,呵呵··
ydm305365 2009-11-30
  • 打赏
  • 举报
回复
1,派生类继承于基类,那么它就有了基类所有的域和方法,包括private修饰的域和方法 // 继承不能继承父类私有的东西
2,在派生类对象中,有一个“子对象”,就是基类的对象,但是不能访问“子对象”的private域和方法 //如果不是多态,而是直接new 出来一个父类对象..那这个对象不但不能访问子类的私有东西..就是不是私有的也不能访问
3,对于基类中public方法,在没有覆盖的情况下,使用this.method()和super.method()得到的效果是一样的,那么是不是说它们都是对“子对象”中method()方法的调用? //如果没有覆盖的话this调用当前对象的method方法 也就是子类的method方法...而super调用的是父类的method方法...这个时候这2个方法其实是一样的
gmh521 2009-11-30
  • 打赏
  • 举报
回复
读着有点别扭,你是台湾的?
liuahuilele 2009-11-30
  • 打赏
  • 举报
回复
顶上
chenzhp 2009-11-30
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 bayougeng 的回复:]
1,派生类继承于基类,那么它就有了基类所有的域和方法,包括private修饰的域和方法
是的。
Java codepublicclass Super{privatevoid methodPrivate(){
...
}protectedvoid methodProtected(){
...
methodPrivate();
...
}
}publicclass Subextends Super{
@Overrideprotectedvoid methodProtected(){
...super.methodProtected();
...
}
}
试问,如果Sub没有继承methodPrivate方法的话,super.methodProtected()如何运行呢?

//个人觉得有点不对吧,这是super在调用这个方法啊
2,在派生类对象中,有一个“子对象”,就是基类的对象,但是不能访问“子对象”的private域和方法
是的,对于Sub的实例来说,父类的private是不能显式的调用的。

3,对于基类中public方法,在没有覆盖的情况下,使用this.method()和super.method()得到的效果是一样的,那么是不是说它们都是对“子对象”中method()方法的调用?
运行的时候,先在Sub的定义中查找method方法,如果找到则调用。如果找不到,则再往Sub的父类中找。如果还找不到,继续往Super的父类找……如果一直都找不到,那编译的时候就报错了。
[/Quote]
bayougeng 2009-11-30
  • 打赏
  • 举报
回复
1,派生类继承于基类,那么它就有了基类所有的域和方法,包括private修饰的域和方法
是的。
public class Super{
private void methodPrivate(){
...
}

protected void methodProtected(){
...
methodPrivate();
...
}
}

public class Sub extends Super{
@Override
protected void methodProtected(){
...
super.methodProtected();
...
}
}

试问,如果Sub没有继承methodPrivate方法的话,super.methodProtected()如何运行呢?

2,在派生类对象中,有一个“子对象”,就是基类的对象,但是不能访问“子对象”的private域和方法
是的,对于Sub的实例来说,父类的private是不能显式的调用的。

3,对于基类中public方法,在没有覆盖的情况下,使用this.method()和super.method()得到的效果是一样的,那么是不是说它们都是对“子对象”中method()方法的调用?
运行的时候,先在Sub的定义中查找method方法,如果找到则调用。如果找不到,则再往Sub的父类中找。如果还找不到,继续往Super的父类找……如果一直都找不到,那编译的时候就报错了。

62,621

社区成员

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

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