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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

一个函数什么时候该定义为抽象,有什么好处吗

7 个回复

倒序浏览
用抽象类及接口最重要的用处还是在于,使代码实现很方便的扩展,最简单的就是在new对象时,将生成对象定义为接口,在以后需要替换时就很方便。
抽象类及接口,并不只是为了抽象,为了接口面抽象,而接口。在你需要用到一系列可继承自抽象类的子类,或是需要实现共同接口的多个实现类时,才需要考虑。

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 duanyoujiji 于 2014-3-11 12:11 编辑


我只知道父类可以定义成抽象类,子类继承父类重写父类的抽象方法。这个抽象方法是子类共同抽取出来的特性比如说吃饭这个方法,有的人吃馒头有的人吃米饭,子类具体要做什么就得重写这个抽象方法。也就是说当由父类派生出来多个子类,并且他们有某些共同的特性时候,可以定义成抽象方法。我是这么理解的。
回复 使用道具 举报
当人们从现实生活中发现,有一些东西具有一些共性的,就把这共性呢提取出来(但这也许并不存在)。于是出现了抽象类,他不能够创建实例,但是能被继承。对于抽象函数他也是从共性的功能抽象出来的,一般在接口中用的比较多,接口是对事物共性功能的抽象,由具体的对象去实现具体的功能。比如吃着个功能。对于人来说吃米饭(每个人又有自己喜欢吃的东西),对于猫来说,它吃老鼠。对于大灰狼来说,他喜欢吃喜羊羊。所以吃着个动作可以定义为抽象,由对象去实现它。

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
以后,你要是遇到是否要定义抽象函数,就要看看这函数的功能是否是具有共性的,或者由具体的对象去实现。
回复 使用道具 举报
我来打个比方吧
以学生为列,博士和硕士都是学生,那么学生就成为了一个父类了,他们都具有学生的特征,那些共同的特点就可以继承,实现代码重用
但是如果还有一种类型的学生,它既具有博士,又具有硕士的特点,那我岂不是要继承两个类,但是这两个类里又有很多相同的特征啊,那就现的代码冗余了,是吗?
那么我现在的目的就是要使它简洁,但是要达到那个效果,我就会用到接口,所谓的接口有两个含义
1。方法的集合
2。概念
第二中就是我们JAVA中用的,它把类中某些独有的方法用接口的形式表现出来,然后你就直接implement接口就是拉,再继承学生那个类,就可以拉

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
我觉得应该是出现在子父类中。因为你不知道子类中的具体的操作是什么,所以你在定义父类的时候可以把这个方法给做成抽象方法。因为抽象类中如果有了抽象方法,所以了,类也必须要做成抽象类,这样以后在创建这个抽象类的子类的时候,就必须要实现抽象类(父类)中的抽象方法。这是我的理解。希望能帮的上你。

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
l939 中级黑马 2014-3-11 12:35:08
8#
抽象类都是给父类定义的。方便于扩展。
比如说:人都会有吃饭的功能,但是,我们每个人吃的东西都会有所不同。这时,我们就可以抽象出吃东西的功能,然后交给子类来完成,让子类说自己要吃什么。而如果是单纯的继承类。。没有使用抽象。。那么我们吃的东西在父类里就已经定好了。。。不可能要求每个人都吃一个东西吧?所以这时就有了抽象出吃,让子类说吃什么。
代码如下;
          abstract class Person//抽象出人会吃东西的功能,但吃什么不确定,需要子类自己说
          {
                 abstract  void eat();
          }
         class Zhangsan extends Person//抽象类继承,子类想要实例实现就必须复写父类的方法
         {
              //void eat();这样写依然是抽象的;
              public void eat()
              {
                    System.out.println("吃面");//子类想要实例化,就必须说出自己要干什么
              }
         }
         //后面的代码就不写了。反正就是这个意思,用抽象类可以提供代码的扩展性

评分

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

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马