Java之接口总结以及和抽象类的区别

Java之接口总结以及和抽象类的区别

1.接口:为了弥补Java中单根继承的不足,Java中引入了接口。一个类只能继承自一个类,但是可以实现多个接口。
在抽象类中,可以包含一个或者多个抽象方法,但是在接口中,所有的方法必须是抽象的,不能有方法体,他比抽象类更加的抽象。接口规定一个雷必须做什么而不规定他如何做。
2.接口的特性

  1. 接口中只定义抽象方法,默认为public abstract;
  2. 接口中没有构造方法;
  3. 接口不能实例化;
  4. 接口中定义实例变量,非抽象实例方法以及静态方法都是不允许的;
  5. 一个借口不能实现另一个接口,但是可以多继承其它接口。

3.接口实例:
implements为关键字,实现接口中的方法

interface Fruit {
    public void eat();
}

Orange类实现了Fruti接口

```java
 class Orange implements Fruit{
     @Override
     public void eat() {
         System.out.println("吃橘子");
     }
 }

class Apple implements Fruit {
    @Override
    public void eat() {
        System.out.println("吃苹果");
    }
}
public class test1 {
    public static void main(String[] args) {
        //实例化对象s1
       Fruit s1=new Apple();
       s1.eat();//调用eat()方法
        Fruit s2=new Orange();
        s2.eat();

    }

输出结果:

"C:\Program Files (x86)\Java\jdk1.8.0_172\bin\java.exe" -javaagent:D:\ideaIU-2018.1.5.win\lib\idea_rt.jar=63800:D:\ideaIU-2018.1.5.win\bin -Dfile.encoding=UTF-8 -classpath "C:\Program Files (x86)\Java\jdk1.8.0_172\jre\lib\charsets.jar;C:\Program Files (x86)\Java\jdk1.8.0_172\jre\lib\deploy.jar;C:\Program Files (x86)\Java\jdk1.8.0_172\jre\lib\ext\access-bridge-32.jar;C:\Program Files (x86)\Java\jdk1.8.0_172\jre\lib\ext\cldrdata.jar;C:\Program Files (x86)\Java\jdk1.8.0_172\jre\lib\ext\dnsns.jar;C:\Program Files (x86)\Java\jdk1.8.0_172\jre\lib\ext\jaccess.jar;C:\Program Files (x86)\Java\jdk1.8.0_172\jre\lib\ext\jfxrt.jar;C:\Program Files (x86)\Java\jdk1.8.0_172\jre\lib\ext\localedata.jar;C:\Program Files (x86)\Java\jdk1.8.0_172\jre\lib\ext\nashorn.jar;C:\Program Files (x86)\Java\jdk1.8.0_172\jre\lib\ext\sunec.jar;C:\Program Files (x86)\Java\jdk1.8.0_172\jre\lib\ext\sunjce_provider.jar;C:\Program Files (x86)\Java\jdk1.8.0_172\jre\lib\ext\sunmscapi.jar;C:\Program Files (x86)\Java\jdk1.8.0_172\jre\lib\ext\sunpkcs11.jar;C:\Program Files (x86)\Java\jdk1.8.0_172\jre\lib\ext\zipfs.jar;C:\Program Files (x86)\Java\jdk1.8.0_172\jre\lib\javaws.jar;C:\Program Files (x86)\Java\jdk1.8.0_172\jre\lib\jce.jar;C:\Program Files (x86)\Java\jdk1.8.0_172\jre\lib\jfr.jar;C:\Program Files (x86)\Java\jdk1.8.0_172\jre\lib\jfxswt.jar;C:\Program Files (x86)\Java\jdk1.8.0_172\jre\lib\jsse.jar;C:\Program Files (x86)\Java\jdk1.8.0_172\jre\lib\management-agent.jar;C:\Program Files (x86)\Java\jdk1.8.0_172\jre\lib\plugin.jar;C:\Program Files (x86)\Java\jdk1.8.0_172\jre\lib\resources.jar;C:\Program Files (x86)\Java\jdk1.8.0_172\jre\lib\rt.jar;D:\TestDemo\out\production\TestDemo" com.company.test1
吃苹果
吃橘子

Process finished with exit code 0

4.接口的使用总结:

  1. 接口的使用和类的使用不同点:类需要一个对象是,可以直接而new新对象,但是接口不可以;
  2. 接口必须通过类来实现他的抽象方法;
  3. 如果这个类不能实现接口中的抽象方法,则这个类也应该为abstract ;
  4. 不允许创建接口的实例,但是允许定义接口类型的引用变量通过引用来实现。

5. 接口和抽象类的区别
接口 VS 抽象类
(1)接口中不能有具体的实现,但抽象类可以。
(2)一个类要实现一个接口必须实现其里面所有的方法,而抽象类不必。
(3)通过接口可以实现多继承,而抽象类做不到。
(4)接口不能有构造方法,而抽象类可以。
(5)实体类与接口之间只有实现关系,而实体类与抽象类只有继承关系。
抽象类与接口之间既有实现关系又有继承关系。
(6)接口中的方法默认都是公开抽象方法,属性默认都是公开静态常量
而抽象类不是。

6. 适用场景:
(1)如果强调的是不同实现的共享与不同场合的行为方法的简易替代,则采用接口方式比较合适。
(2)如果不同的实现属于同一个类别,并且为了共享一个公共的状态与行为。在通常情况下采用抽象类的方式实现较为合适。
(3)设计时一般实体类就要用抽象类.而操作类就要用接口。
(4)接口一般都在约束实现它的子类的行为与状态。
(5)对于一些已经开发好的系统,在结构上进行较大的调整已经不太现实,这时可以通过定义一些接口并追加相应的实现来完成功能结构的扩展。
(6)用接口来定义一些全局变量 。
(7)在设计一套软件系统的初期,我们可以用接口来对一些基本数据元素的特性来进行一些描述,再根据需要进行不同的实现。

本人才疏学浅,如有错误,烦请指出,谢谢!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值