Java初窥门径
- Java万物皆对象,带你进入编程之旅!
- Java运算符,操纵数据全靠它!
- Java控制流程,保持身材尤为重要!
- Java初始化和清理,控制安全是首要!
- Java封装是为了更好的重构!
- JavaOOP优雅总是会有回报!
- Java接口和抽象类如何选择!
- Java集合,日常开发掌握这些就够了
- Java不要再问String为什么是不可变的!
前言
接口和抽象类提供了一种将接口与实现分离的更加结构化的方法。
抽象类
Java 提供了一个叫做抽象方法的机制,这个方法是不完整的:它只有声明没有方法体。下面是抽象方法的声明语法:
abstract String name();
包含抽象方法的类叫做抽象类。如果一个类包含一个或多个抽象方法,那么类本身也必须限定为抽象的,否则,编译器会报错。
abstract class User {
abstract String name();
}
接口
使用 interface 关键字创建接口,interface 和 class 一样随处常见。像下面这样:
public interface User {
int age();
}
多继承
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 |
总结
认为接口是好的选择,从而使用接口不用具体类,这具有诱惑性。几乎任何时候,创建类都可以替代为创建一个接口。恰当的原则是优先使用类而不是接口。从类开始,如果使用接口的必要性变得很明确,那么就重构。接口是一个伟大的工具,但它们容易被滥用。
最后的最后
为初学者提供学习指南,为从业者提供参考价值。我坚信码农也具有产生洞见的能力。扫描下图二维码关注,学习和交流!