A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 依然超级赛亚人 高级黑马   /  2014-7-14 22:57  /  3806 人查看  /  42 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

既然抽象类和接口都不能通过自己创建对象,而且子类又继承了它的所有属性和功能,那为什么不干脆都直接用子类创建子类自己的对象进行使用呢?这样的话,也不用担心父类用不了子类的某些特有功能的问题。

评分

参与人数 1技术分 +2 收起 理由
Doraemon + 2

查看全部评分

42 个回复

倒序浏览
我的理解是:复用!
继承让一个子类天生就有了父类的非私有属性和方法,它可以像使用自己的属性和方法一样使用继承而来的。另外可定义自己独有的属性和方法。这就让子类少写一些重复代码。
回复 使用道具 举报
本帖最后由 xp8812 于 2014-7-14 23:26 编辑

A extends BC extends B

public void print(B b){

}
用抽象类或者接口当成参数,就可以把任意子类传进去,而不用写成:
public void print(A a){

}



public void print(C c){

}

回复 使用道具 举报
我感觉接口就像C语言中的声明函数,就只是为了告诉大家我这里有这些功能,但没说怎么实现,只有需要的时候,才去实现接口并覆写里面的内容。就相当与一个导引,里面只有函数名,方便以后查看代码体系的基本功能。
回复 使用道具 举报
抽象类和接口可以理解为一项规则,可以扩展程序的功能,每个实现类都可能有自己的独特实现方式,若用继承的话会造成垃圾代码太多,让程序更臃肿,且接口可以多现实而继承只能单继承

评分

参与人数 1技术分 +2 收起 理由
Doraemon + 2

查看全部评分

回复 使用道具 举报
我的理解,靠老毕的讲解:猫和狗都要继承动物类,动物都会eat东西,但是eat的具体东西是什么不知道,所以eat方法没有主体(也就是{}),而只是定义了抽象的eat方法,动物类也是抽象的。如果动物类里边没有定义eat方法,猫和狗两个类就不一定都要吃东西了,就违背了规律。反过来,猫和狗都必须要吃东西,吃的东西不具体,所以向上抽取了抽象的eat方法、定义了动物这个抽象类。
回复 使用道具 举报
为了增加代码的复用性。
回复 使用道具 举报
J.twt 中级黑马 2014-7-15 21:53:49
8#
路过,看看各位大神的见解
回复 使用道具 举报
类继承体现的是:is a的关系。父类中一般定义的是共性的内容。
接口被实现体现的是:like a的关系。接口中一般定义的扩展功能。
回复 使用道具 举报
hejinzhong 发表于 2014-7-15 09:57
我感觉接口就像C语言中的声明函数,就只是为了告诉大家我这里有这些功能,但没说怎么实现,只有需要的时候 ...

若有所悟,多谢赐教!
回复 使用道具 举报
增强代码的复用性
回复 使用道具 举报
楼上都是大神啊,感觉都好厉害的说。。。
回复 使用道具 举报
接口和抽象类可以有很多子类,这些子类实现他们自己的功能扩展,另外但学习到后面你就会发现多态的好处
回复 使用道具 举报
杨冬冬 发表于 2014-7-15 22:12
类继承体现的是:is a的关系。父类中一般定义的是共性的内容。
接口被实现体现的是:like a的关系。接口中 ...

恩。接口提供扩展功能这一条倒是能明白大概。就是有一点不明白的是,对于抽象类来说,它的存在使子类继承了他的功能,提高了代码的复用性。既然如此,以后不用抽象类创建对象(借助子类),只用子类创建对象不就行了吗?也就是把抽象类摆在那里,不用借助多态的形式再创建这个抽象类的对象不行吗?
回复 使用道具 举报
LFW 发表于 2014-7-15 20:21
我的理解,靠老毕的讲解:猫和狗都要继承动物类,动物都会eat东西,但是eat的具体东西是什么不知道,所以ea ...

恩...就是不明白为什么会有animal d=new cat();(或 animal d=new dog();)这个步骤,也就是多态。想要使用animal的功能直接创建子类自己的对象不就行了吗?也就是  cat c=new cat();(或 dog d=new dog();)子类继承了它的方法,应该可以实现抽象类想要的功能啊?
回复 使用道具 举报
hmid 发表于 2014-7-14 23:19
我的理解是:复用!
继承让一个子类天生就有了父类的非私有属性和方法,它可以像使用自己的属性和方法一样 ...

恩,复用这个优势倒是能理解,就是不明白为什么在子类能复用父类方法的背景下还要去使用抽象的父类(通过多态创建对象)的方法?
回复 使用道具 举报
xp8812 发表于 2014-7-14 23:24
A extends BC extends B

public void print(B b){

呃...还是有些不明白,万望多赐教一下!
回复 使用道具 举报
J.twt 发表于 2014-7-15 21:53
路过,看看各位大神的见解

不要只路过,发表一下看法嘛?
回复 使用道具 举报
汉谟拉比 发表于 2014-7-15 22:31
接口和抽象类可以有很多子类,这些子类实现他们自己的功能扩展,另外但学习到后面你就会发现多态的好处 ...

恩,一步一步往后学!
回复 使用道具 举报
LFW 中级黑马 2014-7-16 11:27:52
20#
依然超级赛亚人 发表于 2014-7-15 22:41
恩...就是不明白为什么会有animal d=new cat();(或 animal d=new dog();)这个步骤,也就是多态。想要使用 ...

为了调用时能够无差别的接收狗、猫。例如宠物店要写一个卖猫、狗、猪、兔的功能,你不能为猫、狗、猪、兔都写一个卖的功能,也就是为了代码的复用性,你直接写一个卖动物的功能,只要将该功能接收定义为(Animal a ),你就可以接收所有继承了动物类的猫、狗。这也就是为什么要向上转型的原因了。然后你要使用具体是猫抓鱼、狗追猫的特有功能时,因为动物并不都要抓鱼追猫,所以接收进来的Animal a = new Cat(),就要向下转型为Cat c=(Cat)a;这样这个动物就具体为 Cat了,自然就可以抓鱼了。>>>>个人理解。我也刚看完这一段不久,来回看来回看,慢慢体会。
回复 使用道具 举报
123下一页
您需要登录后才可以回帖 登录 | 加入黑马