美文网首页
认识java中的abstract interface

认识java中的abstract interface

作者: jinelei | 来源:发表于2019-02-18 14:49 被阅读0次

1. abstract(抽象 )

抽象用来描述一类对象,而不是一个确切的对象。

  1. 语法
abstract class Foo { // 合法,abstract类可以不包含abstract方法
}

class Foo1 {
    abstract void bar(); // 非法,包含abstract方法一定是abstract类

    abstract void bar1() {} // 非法,abstract方法不能有实现
}

public class Main {
    public static void main(String[] args) {
        new Foo(); // 非法,不能实例化abstract类
    }
}

2. interface(接口)

比abstract class更加抽象,是一种特殊的abstract class,抽象程度比abstract class更高。

  1. 特点:
    1. 接口中的成员变量默认都是public、static、final类型的,必须被显示初始化。

    2. 接口中的方法默认都是public、abstract类型的。

    3. 接口中只能包含public、static、final类型的成员变量和public、abstract类型的成员方法。

    4. 接口没有构造方法,不能被实例化。

    5. 一个接口不能实现另一个接口,但它可以继承多个其他接口。

    6. 接口必须通过类来实现它的抽象方法。

    7. 与子类继承抽象父类相似,当类实现了某个接口时,它必须实现接口中所有的抽象方法,否则这个类必须被定义为抽象类。

    8. 一个类只能继承一个直接的父类,但能实现多个接口。

3. 两者的区别

  1. 抽象类可以提供成员方法的实现,而接口不行(在java8中使用default可以定义一个默认实现)
  2. 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的
  3. 接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法
  4. 类只能继承一个抽象类,而一个类却可以实现多个接口
  5. 抽象类中的方法子类必须全部实现,不然子类也是抽象类,而接口中的抽象方法子类必须全部实现,是可选择实现的
  6. 抽象类是一种模板设计模式,而接口是一种行为规范。

default关键字定义默认方法实现可能出现的问题

  1. 两个interface定义了相同的方法
interface A {
    default void show() {
        System.out.println("A show");
    }
}
interface B {
    default void show() {
        System.out.println("B show");
    }
}
class Scratch implements A, B { 
// 报错, Error:(13, 1) 类 Scratch从类型 A 和 B 中继承了show() 的不相关默认值
    public static void main(String[] args) {
        new Scratch().show();
    }
}

报错,提示Error:(13, 1) 类 Scratch从类型 A 和 B 中继承了show() 的不相关默认值

  1. 一个class一个interface中定义了相同的方法
interface A {
    default void show() {
        System.out.println("A show");
    }
}

class Scratch implements A {

    public void show() {
        System.out.println("Scratch show");
    }

    public static void main(String[] args) {
        new Scratch().show();
    }
}

合法:class中的方法拥有更高的优先级,将会覆盖interface中的同名方法,输出Scratch show

相关文章

网友评论

      本文标题:认识java中的abstract interface

      本文链接:https://www.haomeiwen.com/subject/nzyaeqtx.html