黑马程序员技术交流社区
标题:
关于继承的问题
[打印本页]
作者:
做个有理想的人
时间:
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继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。继承避免了对一般类和特殊类之间共同特征进行的重复描述。
//建一个A类
class A{
//成员变量 其中num是实参
int num=0;
//成员方法,其中 i 是型参
public A(int i){
//输入int型文件输出下面
System.out.println("aaaaaaaaaaaaaaaaaaa");
System.out.println("i= "+i);
//把输入的i赋值给成员变量num
num=i;
}
}
//B继承A
class B extends A{
int num=0;
//成员方法B.
public B(){
//继承类A的方法.因为B继承了A必然继承了A的特性.所以输入int值10令方法实现.
super(10);
System.out.println("bbbbbbbbbbbbbbbbbbbb");
//这里的num是类B的.
System.out.println("num= "+num);
//如果想显示类A的num则需要用下列的super.num.这里注意num在类A中需是成员变量才可以.
System.out.println("super.num= "+super.num);
}
}
//建立测试类C
public class C{
//main
public static void main(String aa[]){
//new 一个对象B()
new B();
}
}
复制代码
作者:
夏德宇
时间:
2013-12-18 19:53
“仅为了获取其他类中部分功能而去继承”语法上没问题,但会造成思路混乱。再则java只能单继承,最好继承逻辑上直接相关的类,“仅为了获取其他类中部分功能而”可以通过实现共同接口这种方式。
作者:
做个有理想的人
时间:
2013-12-18 20:48
谢谢了,我想问下怎么结束提问呢?
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2