接口的继承和实现
-
接口的继承
接口可以继承接口,而且可以 多继承
,只有类继承类才是 单继承
。
public interface Person {
String age = "24";
void age();
}
public interface SuperMan {
String name = "张三";
void name();
}
public interface Father extends SuperMan, Person {
}
同时子接口不需要重写父接口的方法,可以定义自己的方法,接口中可以定义变量,不过默认是被 static final 修饰的,所以接口中的变量其实就是静态常量。上面说到的接口 SuperMan
等同于:
public interface SuperMan {
static final String name = "张三";
void name();
}
-
接口的实现
接口没有 构造器
,不能被实例化,所以想要调用接口中封装的方法必须实现接口。
public class Man implements Father{
@Override
public void age() {
}
@Override
public void name() {
}
public static void main(String[] args) {
System.out.println(Father.age);
System.out.println(Father.name);
System.out.println(Person.age);
System.out.println(SuperMan.name);
}
}
实现类必须实现父接口中的方法,以及父接口继承的所有方法。
抽象类
-
普通类
普通类可以被实例化,并且包含有参构造方法、无参构造方法、静态方法、普通方法、静态变量、普通变量、静态代码块、普通代码块。
-
抽象类
在所有的普通方法定义中都会有一个大括弧“{}”,中间包含的内容称作 方法体
,有方法体的方法一定可以被对象直接调用。而抽象方法,是指在方法的定义中没有方法体并且必须被关键词 abstract
所修饰的方法。 而拥有抽象方法的类就是抽象类,抽象类要使用 abstract 关键字声明。
public abstract class Man implements Father {
protected void water() {
// 普通方法
System.out.println("存在方法体");
}
protected abstract void food();// 抽象方法没有方法体
static {
System.out.println("Man 静态代码块");
}
{
System.out.println("Man 普通代码块");
}
protected Man() {
// 抽象类构造器
System.out.println("Man 无参构造方法");
}
}
抽象类不能被 new
关键词实例化,但是在抽象类的子类实例化时会先调用父类的无参构造方法。
public class Women extends Man {
private static final Women instance = new Women();
@Override
protected void food() {
}
@Override
public void age() {
}
@Override
public void name() {
}
public static void main(String[] args) {
System.out.println(Women.instance);
}
}
console 控制台打印如下
Man 静态代码块
Man 普通代码块
Man 无参构造方法
com.szlanlingtong.com.mall.model.common.test.Women@3fee733d
Process finished with exit code 0
可以看到代码的执行顺序是
父类静态代码块 -> 父类普通代码块 -> 父类无参构造 -> 子类方法
-
抽象类实现接口
上面的代码可以看到抽象类可以不实现接口中的方法,但是普通类必须实现接口中的所有方法及抽象类中的所有抽象方法。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于