欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-03-17 09:48:49
刚学习java的时候,总觉得接口和抽象类很像,但又说不上具体有什么区别。今天静下来,翻翻书,查查资料,做个小结。首先举两个例子,看看interface和abstract class 在“外形”上有啥异同。 1、先看一下抽象类: 抽象类的主要特征有两个: 一、申明类的时候添加abstract关键字。二 ......

      刚学习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关键字,但我还是有一个疑问,接口是不是也是一种类?后来查阅发现:

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

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

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

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

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

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

 

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

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

 

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