Java基础—抽象类和接口

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Java基础—抽象类和接⼝
1.抽象类
在Java语⾔中使⽤abstrac关键字来定义抽象类和抽象⽅法,抽象⽅法没有定义,⽅法名后⾯直接跟⼀个分号,⽽不是花括号。

public abstract class Employee
{
private String name;
private String address;
private int number;
public abstract double computePay();
//其余代码
}
抽象类总结:
1. 抽象类不能被实例化(初学者很容易犯的错),如果被实例化,就会报错,编译⽆法通过。

只有抽象类的⾮抽象⼦类可以创建对象。

2. 抽象类中不⼀定包含抽象⽅法,但是有抽象⽅法的类必定是抽象类。

3. 抽象类中的抽象⽅法只是声明,不包含⽅法体,就是不给出⽅法的具体实现也就是⽅法的具体功能。

4. 构造⽅法,类⽅法(⽤static修饰的⽅法)不能声明为抽象⽅法。

5. 抽象类的⼦类必须给出抽象类中的抽象⽅法的具体实现,除⾮该⼦类也是抽象类。

2.接⼝
Interface关键字⽤来声明⼀个接⼝。

/* ⽂件名 : Animal.java */
interface Animal {
public void eat();
public void travel();
}
接⼝总结:
1. ⼀个接⼝能继承另⼀个接⼝,和类之间的继承⽅式⽐较相似。

接⼝的继承使⽤extends关键字,⼦接⼝继承⽗接⼝的⽅法
2. 接⼝的⽅法声明必须是 public abstract ,即便不写默认也是
3. 类实现接⼝时,除⾮实现接⼝的类是抽象类,否则该类要定义接⼝中的所有⽅法。

4. 接⼝⾥⾯只能声明 public static final 修饰的变量
5. 接⼝不能被实例化,但是可以被实现类创建
3.抽象类与接⼝的区别
抽象类中的⽅法可以有⽅法体,能实现⽅法的具体功能,但是接⼝中的⽅法不⾏。

抽象类中的成员变量可以是各种类型的,⽽接⼝中的成员变量只能是 public static final 类型的。

接⼝中不能含有静态代码块以及静态⽅法(⽤ static 修饰的⽅法),⽽抽象类是可以有静态代码块和静态⽅法。

⼀个类只能继承⼀个抽象类,⽽⼀个类却可以实现多个接⼝。

4.接⼝的默认⽅法
Java 8 新增了接⼝的默认⽅法。

简单说,默认⽅法就是接⼝可以有实现⽅法,⽽且不需要实现类去实现其⽅法。

我们只需在⽅法名前⾯加个 default 关键字即可实现默认⽅法。

为什么要有这个特性?
⾸先,之前的接⼝是个双刃剑,好处是⾯向抽象⽽不是⾯向具体编程,缺陷是,当需要修改接⼝时候,需要修改全部实现该接⼝的类,⽬前的 java 8 之前的集合框架没有 foreach ⽅法,通常能想到的解决办法是在JDK⾥给相关的接⼝添加新的⽅法及实现。

然⽽,对于已经发布的版本,是没法在给接⼝添加新⽅法的同时不影响已有的实现。

所以引进的默认⽅法。

他们的⽬的是为了解决接⼝的修改与现有的实现不兼容的问题。

默认⽅法语法格式如下:
public interface Vehicle {
default void print(){
System.out.println("我是⼀辆车!");
}
}
考虑这样的情况,⼀个类实现了多个接⼝,且这些接⼝有相同的默认⽅法,以下实例说明了这种情况的解决⽅法:
public interface Vehicle {
default void print(){
System.out.println("我是⼀辆车!");
}
}
public interface FourWheeler {
default void print(){
System.out.println("我是⼀辆四轮车!");
}
}
第⼀个解决⽅案是创建⾃⼰的默认⽅法,来覆盖重写接⼝的默认⽅法:
public class Car implements Vehicle, FourWheeler {
default void print(){
System.out.println("我是⼀辆四轮汽车!");
}
}
第⼆种解决⽅案可以使⽤ super 来调⽤指定接⼝的默认⽅法:
public class Car implements Vehicle, FourWheeler {
public void print(){
Vehicle.super.print();
}
}
静态默认⽅法
Java 8 的另⼀个特性是接⼝可以声明(并且可以提供实现)静态⽅法。

例如:
public interface Vehicle {
default void print(){
System.out.println("我是⼀辆车!");
}
// 静态⽅法
static void blowHorn(){
System.out.println("按喇叭");
}
}
使⽤时通过Vehicle.blowHorn();来调⽤即可。

相关文档
最新文档