抽象类和接口 (Java)

抽象类

抽象类:含有abstract修饰符的class即为抽象类

对于抽象类里的方法

  1. 含有抽象方法的类必须定义为抽象类。
  2. 抽象方法可以有 public protected 或者 默认 修饰 ,不能有 private static 和final修饰
  3. 抽象类可以有构造方法,但抽象类不能创建实例对象(new),只能被用来继承(extends)。

对于抽象类的子类

​ 抽象类中定义抽象方法必须在具体子类中实现,如果子类没有实现抽象父类中的所有抽象方法,那么子类也必须定义为abstract类型。

抽象类的意义:

​ 实现了规范和具体实现的分离。通过 abstract 方法定义规范,然后要求子类必须定义具体实现。引用变量仍然可以定义为抽象类,这样就可以规范地实现多态了。

接口(interface)

​ 可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。

​ 接口中只能包含 静态常量、抽象方法 ,不能有普通属性、构造方法、普通方法、静态块。

[权限修饰符(public或默认)] interface 接口名 [extends 父接口1,父接口2] { 

	常量定义; // 接口中的成员变量类型默认为public static final

	抽象方法定义; // 接口中的方法定义默认为public abstract类型

}

对于接口的子类:

子类实现:子类通过 implements 来实现接口中的规范

接口允许声明:接口不能创建实例,但是可用于声明引用变量类型。 Interface 接口名

子类方法重写:一个类实现了接口,必须实现接口中所有的方法,并且这些方法只能是 public

接口在版本上的变化:

​ Java 7,接口可以包含:常量、抽象方法;

​ Java 8,额外包含:默认方法、静态方法;

interface father {    // 这里是Java 8 额外包含:默认方法、静态方法;

    default void aa(){    // 默认方法 默认不是没有修饰符,是直接用default修饰   子类可以重写,也可以不重写
        System.out.println("father000");
    }
    static void bb(){       // 静态方法 可以用  接口名.bb()   调用
        System.out.println("111");
    }
}

class son implements father{
    public static void main(String[] args) {
        son s = new son();
        s.aa();

        father.bb();
    }
    public void aa(){   // 重写接口的的 默认方法
        System.out.println("son000");
    }

}
// 运行结果:
son000
111

​ Java 9,额外包含:私有方法 ;

抽象类和接口比较

为什么需要接口?接口和抽象类的区别?

接口就是比“抽象类”还“抽象”的“抽象类”,可以更加规范的对子类进行约束。全面地专业地实现了:规范和具体实现的分离

​ 抽象类还提供某些具体实现,接口 不提供任何实现 ,接口中所有方法都是抽象方法。接口是完全面向规范的,规定了一批类具有的公共方法规范

从接口的实现者角度看,接口定义了可以向外部提供的服务。

从接口的调用者角度看,接口定义了实现者能提供那些服务

定义上对比

  1. 抽象类可以有构造方法(不能被实例化),可以有普通成员变量和静态成员变量,可以有的普通方法和静态方法。接口都没有(但是在 Java 8,额外包含:默认方法、静态方法;Java 9,私有方法 )

  2. 抽象类中的抽象方法的访问类型可以是public,protected 和 默认类型,接口中的抽象方法默认为public abstract。

  3. 一个类可以实现(implements)多个接口,但只能继承(extends)一个抽象类。

    接口可以多继承(extends)多个接口

应用的对比:

​ 抽象类在代码实现方面发挥作用,可以实现代码的重用。接口更多的是在系统架构设计方法发挥作用,主要用于定义模块之间的通信契约。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值