目录
1.抽象类(Abstract Class)
类是对象的抽象,抽象类是类的更高一个层次的抽象,所以抽象类是一个“不完整的类”。
抽象类可以包含静态变量和实例变量。
抽象类中不一定包含抽象方法,但是包含抽象方法的类必须被定义为抽象类。
abstract class 类名 {
abstract 返回类型 方法名(参数);
}
abstract
修饰的方法是抽象方法,它只有定义,没有实现。abstract
修饰符只能用于普通方法,不能用于static
方法或者构造方法。abstract
修饰的抽象方法时不能使用private
修饰,否则子类是无法重写的。
1.1抽象类的继承
抽象类与类一样,只支持单继承,从抽象类继承的子类必须实现抽象方法。
1.2抽象类的实例化
抽象类不能实例化,也就是说不能使用 new
关键字创建对象。
2.接口(Interface)
接口分为两种:普通(normal)接口和注解(annotation)接口。
接口所声明的成员变量全部是静态常量,即便是变量不加public static final修饰符也是静态常量。
Java 8之前接口中只有抽象方法,而Java 8之后接口中也可以声明具体方法,具体方法通过声明默认方法实现。
interface 接口名 {
//常量前的修饰符可省略
[public] [static] [final] 类型 常量名 = 值;
//抽象方法、静态方法、默认方法
[public] [abstract] [static] [default] 返回类型 方法名(参数);
}
2.1接口的继承
一个类只能继承自另一个类,不能从多个类继承。但是,一个interface
可以使用extends
继承多个interface
。
虽然接口重写,并没有实际意义,但就像类一样,接口也支持方法重写功能。
例如:
interface Hello {
void hello();
}
interface Person extends Hello {
void run();
String getName();
}
2.2接口的实现(implements
)
一个类可以使用implements
实现一个或多个interface
。
这个类必须完全实现这些接口里所定义的全部抽象方法(除默认方法和静态方法);否则,该类将保留从父接口那里继承到的抽象方法,该类也必须定义成抽象类。
实现接口时接口中原有的抽象方法在实现类中必须实现。默认方法可以根据需要有选择实现(覆盖)。静态方法不需要实现,实现类中不能拥有接口中的静态方法。
//InterfaceA.java文件
package com.a51work6;
public interface InterfaceA {
void methodA();
String methodB();
// 默认方法
default int methodC() {
return 0;
}
// 默认方法
default String methodD() {
return "这是默认方法...";
}
// 静态方法
static double methodE() {
return 0.0;
}
}
//ABC.java文件
package com.a51work6.imp;
import com.a51work6.InterfaceA;
public class ABC implements InterfaceA {
@Override
public void methodA() {
}
@Override
public String methodB() {
return "实现methodB方法...";
}
@Override
public int methodC() {
return 500;
}
}
2.3接口的变量
接口不是类,所以不能通过new运算符来实例化一个接口,但可以声明接口的变量。
//接口Comparable
Comparable x;
//Employee类实现了接口Comparable
x = new Employee();
原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/java/javalang/2488.html