抽象类和接口区别
使用方式
抽象类:继承 extends
接口:实现 implements成员变量
抽象类:变量 常量
接口:常量 默认 public static final 修饰成员方法
抽象类:抽象方法 成员方法都可以
接口:只能有抽象方法 静态方法 默认方法构造方法
抽象类:有构造
接口:没有
类与类之间关系
- 单继承
- 多层继承
类与接口之间关系
- 单实现
- 多实现
接口与接口之间的关系
- 单继承
- 多继承
JDK1.8 给接口添加了新特性
静态方法: static 修饰
默认方法: default 修饰
1.实现类不强制重写
2.实现类可以重写默认方法,但是不能使用default修饰
3.默认方法的使用,参照多态的使用
接口中调用方法实例
public class Demo03 {
public static void main(String[] args) {
// 调用接口中静态方法
InterF.staticFun();
// 调用实现类中静态方法
InterFImpl.staticFun();
// 如何调用默认方法 多态形式创建对象
InterF f = new InterFImpl();
f.defaultFun();
InterFImpl fImpl = (InterFImpl)f;
fImpl.test();
}
}
interface InterF{
// 抽象方法
public abstract void fun();
// 静态方法
public static void staticFun() {
System.out.println("我是接口中 ststicFun方法");
}
// 默认方法
public default void defaultFun() {
System.out.println("我是接口中 defaultFun方法");
}
}
// 实现类
class InterFImpl implements InterF{
@Override
public void fun() {
System.out.println("我是实现类中 fun方法");
}
// 手动重写接口中的默认方法
@Override
public void defaultFun() {
System.out.println("我是实现类中 defaultFun方法");
}
// 静态方法
public static void staticFun() {
System.out.println("我是实现中 ststicFun方法");
}
// 成员方法
public void test() {
// 调用接口中静态方法
InterF.staticFun();
// 调用接口中默认方法
InterF.super.defaultFun();
}
}
类适配器模式
- 对象适配器模式
- 缺省适配器模式
1.使用一个适配器类实现接口,实现接口中的所有方法,方法使用空实现
2.用户的类,再来继承这个适配器类
3.类可以进行选择性重写
适配器使用实例
interface JSF{
public abstract void woTui();
public abstract void paoBu();
public abstract void youYong();
}
// 创建一个适配器类Adapter并实现接口
// 当类没有实际意义,不需要创建该类的对象时
// 可以声明为抽象类
class Adapter implements JSF{
@Override
public void woTui() {
}
@Override
public void paoBu() {
}
@Override
public void youYong() {
}
}
class ZZ extends Adapter{
public void PaoBU() {
System.out.println("慢跑10分钟");
}
}