码迷,mamicode.com
首页 > 编程语言 > 详细

Java中接口(interface)和抽象类(abstract)的区别

时间:2020-06-28 14:51:09      阅读:63      评论:0      收藏:0      [点我收藏+]

标签:print   author   写代码   cal   example   这不   create   java   形式   

Java中,接口和抽象类很普遍也很相似,但是初学者在实际写代码中大部分都用接口,抽象类很少用,而且也不怎么注意二者的比较,

哎,没错,就是我了,唉,随着时间的流逝越发觉得自己菜的一批。


 

(1)首先我们先从表现形式上来看一下区别:

接口interface:关键字是interface,用来被类实现,可以多继承(Java类只能单继承)其他接口,内部都是抽象方法,所以被Java类实现(implement)的时候

就要实现内部所有的方法,内部的变量隐式的被public  static final 修饰,方法则是被public abstract 修饰(而且方法只能是public权限)。

 

抽象类abstract:关键字是abstract,用来被类继承,只能单继承其他类,内部既可以有抽象方法,也可以有普通方法,被Java类继承(extend)的时候

必须实现内部的抽象方法,内部的抽象方法被abstract修饰,如果子类没有将抽象类全部实现,那么子类也要加abstract关键字。

 

 

(2)从意义上来说:

接口interface:接口之所以出现,其中一点就是为了满足Java的开闭原则,即对拓展开放,对修改关闭。

例如:现在有一个接口为animal,内部定义了一个方法为call:

1 1 package com.example.dinner.service;
2 2 
3 3 public interface Animal {
4 4     void call();
5 5 }

 

有一个类为dog,实现这个类,同时实现内部方法:

 1 package com.example.dinner.service;
 2 
 3 /**
 4  * @program: dinner
 5  * @description:
 6  * @author: liuqj
 7  * @create: 2020-06-28 14:17
 8  **/
 9 public class Dog implements Animal {
10     @Override
11     public void call() {
12         System.out.println("汪汪叫");
13     }
14 }

 

可以看到小狗是汪汪叫的。那这个时候如果我再有一个类是cat呢,继续实现这个接口:

public class Cat implements Animal {
@Override
public void call() {
System.out.println("喵喵叫");
}
}

 

这样,刚开始只有一个狗,所以是汪汪叫,后来增加一个猫,叫声为喵喵叫,而我们只是进行了拓展没有修改任何东西,接口的意义这不就是。

 

那么抽象类呢?

抽象类也是对所有公共行为进行提取,区别在于,它内部不仅有抽象方法,它还有普通方法,就是在抽象类中已经实现了,子类中不用再

实现,当然你可以进行重写。

 

这样看来好像只要用抽象类就行了呀,因为抽象类中既有抽象方法,也有普通方法,而接口中只有抽象方法。

但接口本身是可以继承多个接口的,Java类实现是可以实现多接口的。

而抽象类本身只能单继承其他类,Java类一次也只能继承一个抽象类。

不过二者都不能被实例化,如果要实例化对象,那么就要实现内部所有的抽象方法。

 

Java中接口(interface)和抽象类(abstract)的区别

标签:print   author   写代码   cal   example   这不   create   java   形式   

原文地址:https://www.cnblogs.com/liuqijia/p/13202747.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!