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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄玉昆 黑马帝   /  2013-2-5 00:29  /  3981 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黄玉昆 于 2013-2-5 19:48 编辑

在毕老师的关于抽象类的视频中,有以下关于抽象类特点的总结:
1、抽象方法一定在抽象类中
2、抽象方法和抽象类必须被abstract修饰
3、抽象类不可用new创建对象,因为调用抽象方法没有意义
4、抽象类中的方法要被使用,必须有子类腹泻所有的抽象方法后,建立子类对象调用。
     若子类只覆盖了部分抽象方法,那么该子类仍为抽象类
下面是代码
  1. <font size="1">abstract class  Student{
  2.        abstract void study();
  3. }

  4. class BaseStudent extends Student{
  5.       void study(){
  6.        System.out.println("Base study");
  7.       }
  8. }

  9. class AbvStudent extends Student{
  10.      void study()
  11.     {
  12.           System.out.println("Abv study");
  13.      }
  14. }</font>
复制代码
这里我就有一点不明白了:
1、抽象类是因为其中方法没有任何实际意义,而不能创建对象,
而且子类还要复写抽象类这个超类的多有抽象方法,这样岂不是会多些很多代码,并不简便啊。
如果直接不定义抽象类这个超类,而就是子类这个类自定义一些方法,不是更方便吗?
2、也就是说一定要用到抽象类吗?
3、到底在什么情况下一定使用抽象类,什么情况是可以不必使用抽象类呢?
4、抽象类到底有什么好处呢?
希望能再结合别的实例解答,谢谢








8 个回复

倒序浏览
首先,一个类中有抽象方法,则该类必须要被abstract 修饰,也就是说声明为抽象类。
抽象类里边可以有抽象的方法,也可以没有抽象的方法。
接口,也是一个抽象类,不同就在于,接口里全部是抽象的方法。
子类为什么必须去复写抽象父类中的抽象方法呢?
我认为,这样的目的就是强迫子类比寻去实现所继承的方法。

一个不恰当的例子  一个person的一个父类  和一个 child的子类
child必然是人 不考虑特殊情况 则应该必然有两只手,但每个人能用手去做什么事情是不同的
所以手就可以在父类里定义为抽象类 强迫其子类拥有人的特征,符合父类的规则,否则就不能归到人这个范畴内。

与之相似的接口也是这个道理
就如平时用的插排上的三相接口来讲  强迫你必须这样去设计,必须是三个叉针,至于你用的材料是铁 是铜还是什么别的什么 自己去决定

可能这两个例子不是很恰当   一句话也就是将,你想归到我这个父类这个范畴里来 你必须按我的规矩去办,至于你是怎么办成的管不着,只看结果。  

浅陋见解,望各楼指正
回复 使用道具 举报
刘凯 发表于 2013-2-5 01:20
首先,一个类中有抽象方法,则该类必须要被abstract 修饰,也就是说声明为抽象类。
抽象类里边可以有抽象的 ...

毕老师也说过类似的原因,可是还有些迷糊,结合着你说的,我在慢慢理解。谢谢啊
回复 使用道具 举报
实现一个接口,但是这个接口的方法比较多,而你只需要用到一个方法,但是因为集成的是接口,所以你不得不是先接口中所有的方法!!就很麻烦,产生很多不必要的代码!如果继承接口,而创建一个抽象类,然后你在继承抽象类,那么久只需要复写你所需要的那一个方法就行了!也就是当你的代码量达到一定水平,就会发现抽象类的好处啦!
回复 使用道具 举报
抽象类主要就是为了接口,有了接口,程序才具有了良好的扩展性。就像重载可以扩展函数的功能一样。
回复 使用道具 举报
范天成 发表于 2013-2-5 20:40
抽象类主要就是为了接口,有了接口,程序才具有了良好的扩展性。就像重载可以扩展函数的功能一样。 ...

是不是说接口更抽象于抽象类呢?抽象类是具体类和接口的桥梁?
回复 使用道具 举报
黄玉昆 发表于 2013-2-5 21:21
是不是说接口更抽象于抽象类呢?抽象类是具体类和接口的桥梁?

不能说接口更抽象于抽象类,因为他们是一个抽象层次的,应该说接口是纯抽象类,接口里面的方法全是抽象方法。
回复 使用道具 举报
范天成 发表于 2013-2-5 21:46
不能说接口更抽象于抽象类,因为他们是一个抽象层次的,应该说接口是纯抽象类,接口里面的方法全是抽象方 ...

是啊,既然抽象类中含有非抽象方法,接口中无非抽象方法,那接口不还是更加抽象于抽象类吗?虽然接口不是抽象类。
回复 使用道具 举报
这里我就有一点不明白了:
1、抽象类是因为其中方法没有任何实际意义,而不能创建对象,
而且子类还要复写抽象类这个超类的多有抽象方法,这样岂不是会多些很多代码,并不简便啊。
如果直接不定义抽象类这个超类,而就是子类这个类自定义一些方法,不是更方便吗?

   抽象类不是因为其方法没有任何实际意义,而是其方法在程序中没有写出其内容。比如一个抽象类中叫动物 ,有一个方法 叫吃。  那个这个吃, 你认为它没任何实际意义吗?实际是有的,这里没有意义的说法只是说它没有被定义。
   继续说下去,如果 狗 这个类 复写了动物 这个抽象类, 狗的 吃这个方法,你可以提示是用嘴吃,用牙齿咬碎。吃进去。
   这就是因为你在方法中定义了内容,所以方法有了“意义”。
  



2、也就是说一定要用到抽象类吗?
     你根本就不必要用抽象类,你完全可以把所有的类都定义成不抽象的。
   
3、到底在什么情况下一定使用抽象类,什么情况是可以不必使用抽象类呢?
     参考上面。

4、抽象类到底有什么好处呢?
     不好意思,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马