【Java学习】抽象类实现接口的好处和意义

抽象类和接口是两个非常相似的类型,许多人认为这俩可以互相换着用,他们既有相似的地方,也有不同的地方,本文将带你梳理这些误区,而且用实际代码告诉你抽象类实现接口会多么的有用。

先来熟悉接口与抽象类的区别:

  • 语法层面的区别

1)抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract 方法;

2)抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的;

3)接口中不能含有静态代码块含有静态方法,而抽象类可以有静态代码块和静态方法;

4)一个类只能继承一个抽象类,而一个类却可以实现多个接口

我来解释一些重要的地方

  1. 抽象类中可以实现抽象方法和非抽象方法,可以使用所有的修饰符进行修饰,不写修饰符的时候就是包访问权限,而接口只能用public abstract,因为接口中只有类似于抽象方法的方法体,你必须对他进行实现。。。
  2. 接口是对动作的抽象,抽象类是对根源的抽象。所以在接口中含有静态代码块是不可以的,因为静态代码块中只含有表达式,所以接口是方法的集合体,这违背了他的基本原理,所以是不可以的。而静态方法在jdk1.8之前不可以实现,在jdk1.8之后就可以正常使用了。。。至于为什么这么定义,除了语法设计之外,接口也是一种特殊的类,所以在jdk1.8之后加上了静态方法。抽象类更加的具体,是一种描述的类,所以既可以实现静态代码块也可以实现静态方法。
  3. 一个类只能继承一个抽象类,而一个类却可以实现多个接口,这个不用多说吧。。

接下来开始介绍抽象类实现接口的好处。

先写一个接口

package com.company;

/**
 * ⊙﹏⊙&&&&&&⊙▽⊙
 *
 * @Auther: pangchenbo
 * @Date: 2019/10/31 10:15
 * @Description:
 */
public interface heihei {
    int i=0;
    void  heihei1();
    void heihei2();
}

然后用抽象类实现接口

package com.company;

/**
 * ⊙﹏⊙&&&&&&⊙▽⊙
 *
 * @Auther: pangchenbo
 * @Date: 2019/10/31 10:14
 * @Description:
 */
public abstract class haha implements heihei  {
    abstract void haha1();
    public void heihei1(){
        System.out.println("heihei");
    }
    static void hahaha(){
        System.out.println("static haha");
    }
    static {
        int a = 1;
    }
}

然后继承抽象类

package com.company;

/**
 * ⊙﹏⊙&&&&&&⊙▽⊙
 *
 * @Auther: pangchenbo
 * @Date: 2019/10/31 10:19
 * @Description:
 */
public class heiha extends haha {
    @Override
    void haha1() {
        System.out.println("haha1");
    }

    @Override
    public void heihei2() {
        System.out.println("heihei2");
    }

    public static void main(String[] args) {
        heiha heiha = new heiha();
        heiha.haha1();
        heiha.heihei2();
        heiha.heihei1();
        System.out.println(i);


    }
}

在抽象类中我们实现了heihei1方法,然后你会发现你在heiha类中继承之后只需要实现heihei2方法即可,这就让你在实现类中如果不想实现某些方法,利用抽象类进行实现,就不会出现在最后的实现类中了,是不是很nice?我想是的。哈哈

你可能感兴趣的:(JAVA)