黑马程序员技术交流社区

标题: 既然子类要重写父类抽象方法,那抽象类存在意义何在 [打印本页]

作者: 凯撒    时间: 2015-12-24 22:01
标题: 既然子类要重写父类抽象方法,那抽象类存在意义何在
代码如下:
//定义抽象类Animal
abstract class Animal {
abstract void shout();
}
//定义Dog类继承抽象类Animal
class Dog extends Animal{
void shout() {
  System.out.println("汪汪");
}
}
//定义测试类
class ChouXiang {
public static void main(String[] args) {
  Dog dog = new Dog();
  dog.shout();
}
}


作者: 凯撒    时间: 2015-12-24 22:02
既然子类了需要一一实现父类里的抽象方法,那么还有为何还要在父类里加抽象方法呢?
这不是多此一举么?
作者: 凯撒    时间: 2015-12-24 22:05
很是困扰,搞不懂,还请诸位为在下解惑一二
作者: 汐枫wait    时间: 2015-12-24 22:37
声明功能用
作者: 凯撒    时间: 2015-12-25 18:24
汐枫wait 发表于 2015-12-24 22:37
声明功能用

为什么要声明功能?
作者: KTdain    时间: 2015-12-25 20:23
父类中的抽象方法是从子类中抽取多类事物的共性。构造出一个固定的一组行为的抽象描述,但是这组行为却能够有任意个可能的具体实现方式,就好比在学校,初级班的学生在上课,高级班的学生也在上课,虽然他们都是在上课但是他们所学习的内容不用,但是都是在学习,将学习编成抽象类,这样可以减少代码量,也能扩展功能。
作者: 云鱼    时间: 2015-12-25 21:43
就像黑社会一样,入会必须要统一的纹身,同一类,
作者: 隔壁老猫    时间: 2015-12-25 23:14
抽象类是为了更好的重用代码,规范编程。
假如每个类都写一个方法,而且实现方法是相同的, 参数也是相同的,那么需要的代码量就很大了.
如果有了抽象类,就可以把他们归为一起. 这样节省了大量的代码量.
作者: 凯撒    时间: 2015-12-28 20:16
KTdain 发表于 2015-12-25 20:23
父类中的抽象方法是从子类中抽取多类事物的共性。构造出一个固定的一组行为的抽象描述,但是这组行为却能够 ...

有减少代码量吗?初中生在实现学习的过程得写初中生学习的方法具体代码块,高中生在实现学习的时候也得再写高中生学习的方法具体代码块,并没有减少代码量啊?
作者: 凯撒    时间: 2015-12-28 20:18
云鱼 发表于 2015-12-25 21:43
就像黑社会一样,入会必须要统一的纹身,同一类,

你这个回答吊,拜服
作者: 凯撒    时间: 2015-12-28 20:27
隔壁老猫 发表于 2015-12-25 23:14
抽象类是为了更好的重用代码,规范编程。
假如每个类都写一个方法,而且实现方法是相同的, 参数也是相同的 ...

规范编程我是认同的,不同人写相同的方法起名可能不同,这样在比较两个相同的方法时可能有点麻烦,而抽象的时候让其有一个固定的名称,这样能省掉很多麻烦。

但是,还是想不到抽象类怎么会节省代码量。每个对象的不同的吃饭行为,或者说睡觉行为,不都还得在这个对象的所在子类里完整的写一遍代码么?父类的抽象方法并没有节省代码量啊?
作者: wx_LV85nAjH    时间: 2015-12-28 21:15
............................
作者: 隔壁老猫    时间: 2015-12-28 22:55
凯撒 发表于 2015-12-28 20:27
规范编程我是认同的,不同人写相同的方法起名可能不同,这样在比较两个相同的方法时可能有点麻烦,而抽象 ...

面相对象的思想, 从继承的好处来考虑
其实不能说抽象类有什么用, 没有抽象类的话一般类也能满足需求,但是有些方法父类确实没有必要去写, 比如吃饭的行为, 你并不知道子类怎么吃, 就算继承下来子类也要重写这个方法, 所以干脆父类抽象这个方法, 让子类想怎么吃怎么吃.
作者: 路路路路灯亮了    时间: 2015-12-28 23:04
行为都有不确定因素,所以要定义一个抽象类
作者: black习    时间: 2015-12-28 23:43
我是这么想的,程序员A,定义一套规则在,他并不实现它,具体的让程序员B去实现,听起来好像是接口,可是接口没有成员变量,只有常量,没有构造方法,有一定的适用限制。感觉是时间先后问题
作者: sunpeijie    时间: 2015-12-28 23:45
好问题 我得想想
作者: 凯撒    时间: 2015-12-29 01:00
隔壁老猫 发表于 2015-12-28 22:55
面相对象的思想, 从继承的好处来考虑
其实不能说抽象类有什么用, 没有抽象类的话一般类也能满足需求,但是 ...

那么为什么非要把这个吃饭的方法抽象到父类里呢?除了能够规范一下代码,让人能够方便阅读,还有其他原因么?
作者: 凯撒    时间: 2015-12-29 01:01
black习 发表于 2015-12-28 23:43
我是这么想的,程序员A,定义一套规则在,他并不实现它,具体的让程序员B去实现,听起来好像是接口,可是接 ...

时间先后问题?还是实现先后问题?
作者: 凯撒    时间: 2015-12-29 01:03
路路路路灯亮了 发表于 2015-12-28 23:04
行为都有不确定因素,所以要定义一个抽象类

你说的是抽象类还是接口?
作者: 爨oooo    时间: 2015-12-29 01:15
666666666666
作者: 凯撒    时间: 2015-12-29 01:21
爨oooo 发表于 2015-12-29 01:15
666666666666

6666666666666
作者: OliverLC    时间: 2015-12-29 01:38
抽象类的意义在于更客观的体现每个子类所具有的特点,子类确实可以复写父类,但是给它加一个抽象的概念岂不是更符合人的思想?更能让java语言看起来更高大上?人有语言,人可以通过语言来传达不同层次的表达意境,计算机语言同样拥有这样的能力!所以不要再认为java语言里的某些东西是无意义的了,如果无意义,当初去开发它又何必呢,你说是不是哈哈哈哈哈
作者: 凯撒    时间: 2015-12-29 19:53
OliverLC 发表于 2015-12-29 01:38
抽象类的意义在于更客观的体现每个子类所具有的特点,子类确实可以复写父类,但是给它加一个抽象的概念岂不 ...

你的智商堪忧啊,哎,不对,是你的智商很高大上啊
作者: 爨oooo    时间: 2015-12-30 00:41
6666666666666666
作者: OliverLC    时间: 2015-12-30 02:21
凯撒 发表于 2015-12-29 19:53
你的智商堪忧啊,哎,不对,是你的智商很高大上啊

菊部累不累?
作者: 1158147908    时间: 2015-12-30 07:23
增加程序的维护性呀,还有可扩展性等
作者: 隔壁老猫    时间: 2015-12-30 20:32
凯撒 发表于 2015-12-29 01:00
那么为什么非要把这个吃饭的方法抽象到父类里呢?除了能够规范一下代码,让人能够方便阅读,还有其他原因 ...

这就要看继承的好处了
1,提高代码复用性.
2.提高了代码的维护性.
3.让类与类产生了一个关系(多态的前提).




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