CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 基础类

两个继承方面的问题

楼主meme5(meme)2003-11-04 12:29:23 在 Java / J2SE / 基础类 提问

两个继承方面的问题  
  1、《core   java》中说明了clone()方法是Object的方法,而且只能定义  
  为protected,而子类定义clone()时必须重新定义其为public,并说这是保护  
  机制的巧面之处,我不知道巧妙在什么地方?受保护的方法对任何子类都可以使用  
  那么这里的protrected   和public有什么区别呢?  
  2、比如父类Employee中有个  
  public   String   toString()  
  {  
  return   getClass().getName()  
  +"[name="+name  
  +",salary="+salary  
  +",hireDay="+hireDay  
  +"]";  
  }  
  而子类Manager中的  
  public   String   toString()  
  {  
  return   super.toString()+   "[bonus="+bonus+"]";  
  }  
  我的问题是Manager的对象调用toString时为什么返回的是Manager[name=....]  
  而不是Employee[name....]?   我的理由是Manager中的toString()中用的是super  
  这说明是调用的是父类方法那理所应该得到父类Employee的类名?  
  以上两个问题应该说知道具体结果但理解上模糊,请知道的人知道一下 问题点数:20、回复次数:7Top

1 楼kypfos(不在寻梦)回复于 2003-11-04 12:36:15 得分 0

protected是保护那个包,一个家族的访问权,它的同一个包里的子类可以调用,其他包就不行,避免被别人继承而做clone()操作。Top

2 楼meme5(meme)回复于 2003-11-04 13:23:53 得分 0

谢谢回答,但我还是不理解任何类都是object的子类,那object中的clone()定义为protected有什么意义呢?Top

3 楼truezerg(赵明宇)回复于 2003-11-04 14:02:55 得分 5

我的问题是Manager的对象调用toString时为什么返回的是Manager[name=....]  
  而不是Employee[name....]?   我的理由是Manager中的toString()中用的是super  
  这说明是调用的是父类方法那理所应该得到父类Employee的类名?  
   
  是调用的父类的方法,但该方法到底应该怎么执行,取决于当前实例,不取决于代码写在哪里(父类还是子类),当前实例是子类,那结果就是子类的结果。Top

4 楼meme5(meme)回复于 2003-11-04 14:38:44 得分 0

谢谢两位的回答,我还是希望听听更多的解释,希望高手赐教!!Top

5 楼kinoviti(-=K.V=-)回复于 2003-11-04 15:24:02 得分 15

首先回答你的第2个问题:  
  当你覆盖了超类的方法的时候那么在编译过程中程序一定是在完成构造函数之前就已经决定了什么是真正的方法,在你的程序中在对象建立之前他的方法就已经完成了,那么当对象调用toString方法时,当然就是现实自己(当前实例)的名字了。你也可以理解为你那个super.toString()就是一种简写吧。  
  其次讨论你的第一个问题:  
  Object.clone()方法定义为保护方式,因为子类也需要限制使用克隆,但是如果把它在Object中就定义为public,则子类根本不能够采取更严格的限制。  
   
  Top

6 楼kinoviti(-=K.V=-)回复于 2003-11-04 16:29:04 得分 0

现在回答你的第一个问题。  
  我们都知道一个新的类多数情况下都是通过   组合(combination)   方式完成的。  
  举个例子吧:  
  汽车(Car)类     那么Car的对象---BMW   (宝马车)extends   Car就有了自己的那些轮胎/车架/发动机,这些东东,这时,夏利   extends   Car   也有了相应的基础东东,  
  (我们都知道   Car   extends   Object)  
  1。如果   Object.clone()----public     那么可以想象     只要   夏利   在他的定义内   调用   宝马的clone方法   那么它也能买BMW了,这不就出现了“盗版”!!  
  2。如果   -----protected   那么   只有夏利   号称   是宝马公司的子公司(继承),或者合作伙伴(同一个包)才能生产宝马,否则   充其量   只能拿来看看但是不能生产。  
  3。如果是----private   那么这下惨了,在clone()方式中我们不能调用   super.clone()来建立完成克隆,连BMW公司都破产了。  
   
  Top

7 楼qinjinhua(秦金华)回复于 2003-11-04 17:04:58 得分 0

楼上的解释真是经典啊Top

相关问题

  • 问一个继承方面的问题?
  • 继承方面的问题
  • 继承的两个小问题
  • 在bcb中如何实现多重继承?如何同时继承两个不同的窗体类TForm1、TForm2。
  • 如何创建继承两个类的派生类?
  • 两个事务的抽象,谁应该继承谁?
  • 请问为这里什么要继承两个CSocket类??
  • 继承两个接口为什么不可以?
  • 在css中能不能两个class之间继承
  • java怎么“继承”已存在的两个类?

关键词

  • 子类
  • 调用
  • 父类
  • 继承
  • 方法
  • clone
  • 定义
  • bmw
  • 宝马
  • 问题

得分解答快速导航

  • 帖主:meme5
  • truezerg
  • kinoviti

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo