乐趣区

关于java:Java接口和抽象类如何选择

前言

接口和抽象类提供了一种将接口与实现拆散的更加结构化的办法。

抽象类

Java 提供了一个叫做形象办法的机制,这个办法是不残缺的:它只有申明没有办法体。上面是形象办法的申明语法:

abstract void f();

蕴含形象办法的类叫做抽象类。如果一个类蕴含一个或多个形象办法,那么类自身也必须限定为形象的,否则,编译器会报错。

abstract class User {abstract void f();
}

创立抽象类和形象办法使得类的抽象性很明确,并能告知用户和编译器应用用意。抽象类同时也是一种有用的重构工具,应用它们使得咱们很容易地将沿着继承层级构造上移公共办法。

接口

应用 interface 关键字创立接口。

public interface User {void f();
}
  • 多继承

Java 只能继承自一个类(或抽象类),但能够实现任意多个接口。因为接口中不容许存在属性(只有动态属性,不实用),所以属性依然只会来自单个基类或抽象类,也就是说,不会存在状态的多继承。

// 多继承
interface One {default void first() {System.out.println("first");
    }
}

interface Two {default void second() {System.out.println("second");
    }
}

interface Three {default void third() {System.out.println("third");
    }
}

class MI implements One, Two, Three {}

抽象类和接口

在理论开发中抉择用抽象类还是用接口是一件令人困惑的事件,抽象类依然是一个类,在创立新类时只能继承它一个。而创立类的过程中能够实现多个接口。下表做了明确的辨别:

个性 接口 抽象类
组合 新类能够组合多个接口 只能继承繁多抽象类
状态 不能蕴含属性(除了动态属性,不反对对象状态) 能够蕴含属性,非形象办法可能援用这些属性
默认办法 和 形象办法 不须要在子类中实现默认办法。默认办法能够援用其余接口的办法 必须在子类中实现形象办法
结构器 没有结构器 能够有结构器
可见性 隐式 public 能够是 protected 或友元

总结

认为接口是好的抉择,从而应用接口不必具体类,这具备诱惑性。简直任何时候,创立类都能够代替为创立一个接口。失当的准则是优先应用类而不是接口。从类开始,如果应用接口的必要性变得很明确,那么就重构。接口是一个平凡的工具,但它们容易被滥用。

最初的最初

为初学者提供学习指南,为从业者提供参考价值。我深信码农也具备产生洞见的能力。扫描下图二维码关注,学习和交换!

退出移动版