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


    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类一次也只能继承一个抽象类。

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

    乾坤未定,你我皆是黑马
  • 相关阅读:
    Idea安装Mevn
    Spring_AOP
    Java_AOP原理
    Spring_数据校验和自定义检验规则和分组校验
    spring全局异常处理
    拦截器和自定义注解@interface
    linux下开启、关闭、重启mysql服务命令
    springboot的HelloWorld~~~
    切面自动装配注意点
    oracle分页
  • 原文地址:https://www.cnblogs.com/liuqijia/p/13202747.html
Copyright © 2020-2023  润新知