浅谈java中接口与抽象类之间的异同

Posted 小楼夜听雨QAQ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅谈java中接口与抽象类之间的异同相关的知识,希望对你有一定的参考价值。

      刚学习java的时候,总觉得接口和抽象类很像,但又说不上具体有什么区别。今天静下来,翻翻书,查查资料,做个小结。首先举两个例子,看看interface和abstract class 在“外形”上有啥异同。

1、先看一下抽象类:

abstract class Person{
    private String name;
    private Person(String n)
    {
        name=n;
    }
    public abstract String getDescription();
    public String getName()
    {
        return name;
    }
}

          抽象类的主要特征有两个: 一、申明类的时候添加abstract关键字。二、有抽象方法。

        抽象方法:只有申明,没有函数体。例如上面的例子,对人(Person)的描述不能一概而论,对于学生,对于老师,对于医生。。。。。。所以在这种情况下可以定义为抽象方法,抽象方法可以(必须)在继承它的子类中实现。抽象类中可以有域(属性),也可以有完整的方法,除了有抽象方法外,与普通类没什么区别。值得注意的是,由于抽象类不完整、具有不确定性,是不能实例化的,只能作为基类被继承。

2、再看一下接口

interface Usb{
     int numbers=2;//自动定义类型为 static final
     void toKeyboard();//自动定义为public 类型
     void toMouse();//自动定义为public 类型
}

       接口也可以定义为public类型,但是和类一样,必须保证所在文件的名字和接口名一直。如果不加public,那么该接口仅面向同包的类。虽然interface取代了class关键字,但我还是有一个疑问,接口是不是也是一种类?后来查阅发现:

      接口和类同属于引用数据类型,是并列的。

3、总结抽象类和接口的区别

    (1)抽象类和接口,都是抽象思想的体现,抽象类是对类的抽象,接口是对“可以实现的功能”的抽象,就是说通过接口,我可以实现某种功能,不是天生的,但是可以学。举个例子,例如在抽象电脑这个客观存在的事物时,可以把它设计成Computer类,我们还可以设计一个USB接口,让他接个鼠标和键盘,这样就具有了输入的功能。而电脑与生俱来的功能,例如显示屏显示信息,cpu计算结果,内部电路芯片等,可以封装在Computer类里面。

   (2)接口相对于抽象类来说,更加抽象。这个从形式上就可以看出。接口中的的方法必须是抽象方法,但是抽象类的方法可以是完整(有方法体)的。

   (3)抽象类说到底还是一个类啊,java中是不支持多继承的,虽然这么做确实降低了程序设计的复杂性,但只能继承一个类可能不一定能满足得了实际开发上的需求。那么接口(interface)在某种度上弥补了这种缺陷,因为它是可以被多个类实现(implements)的。

 

部分内容参考书籍:《thinking in java》、《java核心技术卷一》

参考博客:http://www.cnblogs.com/dolphin0520/p/3811437.html

 

如有错误,欢迎批评指正。

 

 

以上是关于浅谈java中接口与抽象类之间的异同的主要内容,如果未能解决你的问题,请参考以下文章

java类,抽象类,接口之间的区别和联系

抽象类与接口的异同

抽象类和接口的异同?

java中接口和抽象类的异同点

深入delphi编程理解之接口接口与类的异同及接口的声明和实现

java中抽象类和接口的异同点