抽象类和接口
1.抽象类和抽象方法
抽象方法是没有方法体的,通过abstract进行修饰的方法就是抽象方法。
抽象类包含抽象方法的类。如果一个类包含一个或多个抽象方法,该类必须被限定为抽象类。
// 抽象类
public abstract class AbstractTest {
// 抽象方法
public abstract void f();
}
抽象类的格式:
public abstract class 类名{
成员变量;
构造方法;
成员方法;
抽象方法;
}
注意:
①抽象类不能实例化,只能作为父类被子类给继承。
②子类继承为抽象类的父类,则必须重写父类的抽象方法,除非子类也必须是一个抽象类。
// 抽象类
public abstract class AbstractTest {
// 抽象方法
public abstract void f();
}
// 抽象类的子类
// 子类为抽象类可以不用重写父类的抽象方法
abstract class AbstractTestSon extends AbstractTest{
public abstract void f1();
}
class AbstractExtends extends AbstractTestSon{
@Override
public void f() {
}
@Override
public void f1() {
}
}
③抽象类可以有“构造方法”,为成员变量初始化使用。
④抽象类中可以没有抽象方法,当抽象方法必须在抽象类中。
2.接口
接口:在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。
特性:
①接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract
②接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量
接口的声明:
[访问权限] interface 接口名称 [extends 其他的接口名] {
// 声明变量
// 抽象方法
}
public interface InterfaceTest {
int i = 1; // public static final int i = 1
void f(); // public abstract void f()
}
class InterfaceTestImpl implements InterfaceTest{
@Override
public void f() {
}
public void f1(){
System.out.println(InterfaceTest.i);
}
}
补充:
①JDK1.8以后,接口可以包含静态方法和默认方法。
public interface InterfaceTest {
// 静态方法
static void f2() {
System.out.println("f2");
}
// 默认方法
default void f3(){
System.out.println("f3");
}
}
②JDK1.9以后,接口允许将方法定义为private方法。

浙公网安备 33010602011771号