正规军与土八路的较量(抽象类与接口比较分析)

说起这两者还是昨天我通过qq面试的一个题目,当然这也是许多java工作者面试时不可或缺的一个问题。下面就说我对他们的一个理解。

首先:咱们先说说这个正规军之抽象类吧,他应该说是完全符合类对象的概念。那咱们先看看他的概念吧:是一个没有具体对象的概念类。用abstract进行修饰,是所有子类的公共属性的集合。从这一点就可以看出他是一个富户,官职很高。单从他的概念上就可以看出一起东西来:首先这种类是没有对象的即不能被实例化。如果你不知道什么叫对像的实例化,那你就去看看他吧(instance)。但我们再继续往下看,又可以看到一些让人奇怪的东西,他不能实例化,即不能用new来产生新的对象。但他却有构造函数,这一点也许让人感觉到有点不可思议,但他就是这样的一个与众不同的东西。听他们说这个东西不是让new来进行实例化的,是给子类来进行实例化的,所以他就有了许多的孩子。再看看他的方法,没有实现体,这一点与接口就有点相似了(有点象弟兄俩)。不过现在看来这些东西都是用在他的子类身上的,他做好了这样一个框架,让他们孩子来继续完成他的事业呀。正是由于他的方法必须通过子类来实现,所以他本身单独存在也就没有了实际的意义,所以也就不能让final来修饰。这一点也是可以理解,要么他可就绝后了呀,这可有点中国人的传统不相符。

对abstract类的总结如下:

1、非实例化对象类的集合,但拥有自己的构造函数,来让自己的子类来继承。体现了类的继承性,这也是他能够延续的根本。

2、用abstract来修饰,但不能用final来修饰,其他方法也是用abstract来修饰,不能与private,static, final,native并列修饰。另外还一个就是abstract必须放在abstract类中。

下面我们再来说说这个土八路,但就是这个土八路却起到了大作用,解决了c++中的多重继承所出现的烦琐问题同,这也就是后来者所带来的优势吧。长话短说,还是来说说接口这个第三者吧。

接口是一些常量和方法的集合,类似于类的一种东西,他能够实现类当中的继承,用interface来修饰,具有引用型别,可以说是与类平起平做,没有从属之分。

现在我们看看他的主要作用吧:(最重要的一个特性就是他实现了多重继承这一特性。)

1、通过接口可以实现不相关类的相同行为,而不需要考虑这些类之间的层次关系。

2、通过接口可以指明多个类需要实现的方法。

3、通过接口可以了解对象的交互界面,而不要了解对象所对应的类。

这样看来,接口就是一个不能够直接进行实例化,但他具有引用类型的属性,所以可以通过其实现子类来进行new 的实例化,为什么可以这样呢??这里涉及到向上追溯的一些东西。

 

从他的定义可以看说接口中的变量都是final static(想想常量怎么定义就明白这一点是什么意思了)。所以我们在定义的时候不需要写,编译器默认他是这样一个变量。

再说说他的方法,和抽象类差不多,都没有实现的方法体。默认为public abstract来修饰(通常在定义的时候都省略不写)。

那么他是怎么来实现的呢。这里就要接触到一个关键词implements任何一个非相关的类,都可以通过他来实现接口中所有方法,如果实现接口的类是个抽象类的话,那你可以单独的实现某些方法,而不需要全部实现。这一点恐怕也是因为他们有点血缘关系造成的吧(呵呵,暂且那么说)。这里边还有许多文章呢,比如说你实现的一个接口的类中你必须使用完全相同的方法头(在接口中的抽象方法默认的修饰就是public的,所以你在实现的时候可不要忘了呀,要不会出错的。),否则你只是在做重载的工作,并没有实现已有的抽象的方法。

通过以上的一些分析,我们大体上可以了解抽象类作为类中的一个很重要的概念,他起到了一定的作用,使用程序维护更加方便,但却不能实现多重继承的功能,同时也正是因为在类中设计多重继承所带来的麻烦,所以我们的java设计者又在此基础上另门独类出一个接口,他在这方面是专家,功臣。想一想我们不需要了解类与类之间的一些关系,就可以通过接口来实现相同的方法,这是一件多么快乐的事。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值