黑马程序员技术交流社区

标题: 关于继承的问题 [打印本页]

作者: 做个有理想的人    时间: 2013-12-18 16:39
标题: 关于继承的问题
本帖最后由 做个有理想的人 于 2013-12-18 21:49 编辑

今天在整理学习笔记继承上有个注意:“不要仅为了获取其他类中部分功能而去继承”。这句话什么意思,继承是为了多态,但是继承为了使用父类中部分功能也可以吧求解释,最好用代码解释下。第一次发帖,求解惑
作者: 風諾    时间: 2013-12-18 16:50
需要两个类有一些逻辑上的关系,而不是仅仅有些方法重复就继承
就好像别人有个玩具,不能为了能玩玩具而就去认他做那什么是吧?(这时候还是自己买个玩具合适)
作者: §傻、才乖    时间: 2013-12-18 17:36
这句话,按我的理解应该是
不能只为了用某个类的功能而去继承它
而是在逻辑上要用继承的关系才能去继承它

现在比如有一个类叫Fu
而我有一个类叫Zi
如果这个Zi描述的事物在逻辑上跟Fu所描述的事物没 有继承的关系,
但我在Zi这个类中有个功能和Fu这个类中的某一个功能是一样的,
这时候我不能为了用这个功能去继承它

下面是我自己想的办法
那么我可以在这两个类中抽取共性的内容定义一个父类(或者接口),这样就可以用了
又不违背编程的思想
就比如有一个类Student有一个sleep方法
而我有一个类Worker也要有一个相同的sleep方法
而这两个 类在逻辑上不存在继承关系
那我就不能用Worker去继承Student
我可以抽取出一个父类Person ,在Person中定义这个方法sleep
作者: 闭眼就天黑    时间: 2013-12-18 17:39
Java继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。继承避免了对一般类和特殊类之间共同特征进行的重复描述。
  1. //建一个A类
  2. class A{
  3. //成员变量 其中num是实参
  4. int num=0;
  5. //成员方法,其中 i 是型参
  6. public A(int i){
  7. //输入int型文件输出下面
  8. System.out.println("aaaaaaaaaaaaaaaaaaa");
  9. System.out.println("i= "+i);
  10. //把输入的i赋值给成员变量num
  11. num=i;
  12. }
  13. }
  14. //B继承A
  15. class B extends A{
  16. int num=0;
  17. //成员方法B.
  18. public B(){
  19. //继承类A的方法.因为B继承了A必然继承了A的特性.所以输入int值10令方法实现.
  20. super(10);
  21. System.out.println("bbbbbbbbbbbbbbbbbbbb");
  22. //这里的num是类B的.
  23. System.out.println("num= "+num);
  24. //如果想显示类A的num则需要用下列的super.num.这里注意num在类A中需是成员变量才可以.
  25. System.out.println("super.num= "+super.num);
  26. }
  27. }
  28. //建立测试类C
  29. public class C{
  30. //main
  31. public static void main(String aa[]){
  32. //new 一个对象B()
  33. new B();
  34. }
  35. }
复制代码




作者: 夏德宇    时间: 2013-12-18 19:53
“仅为了获取其他类中部分功能而去继承”语法上没问题,但会造成思路混乱。再则java只能单继承,最好继承逻辑上直接相关的类,“仅为了获取其他类中部分功能而”可以通过实现共同接口这种方式。
作者: 做个有理想的人    时间: 2013-12-18 20:48
谢谢了,我想问下怎么结束提问呢?




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2