Java学习9 2020-02-14

内容

1.抽象类
2.接口

一.抽象类

1.语法

class关键字前面加abstract,在修饰词之后

2.注意点:

①抽象类无法被实例化
②抽象类也有构造方法,该构造方法是给子类创建对象用的(原因可以看上篇博客)
(从这个也能看出来,构造方法调用不一定创建对象)

3.抽象类中可定义抽象方法:

①语法
在方法的修饰符列表中添加abstract关键字。
②注意点:
抽象方法应该以 ; 结束,不能带有{}(抽象方法不能有主体
比如

public abstract void m();

2.注意点(续)

③抽象类中不一定会有抽象方法,但是抽象方法必须要出现在抽象类中
④一个非抽象的类继承抽象类,必须将抽象类中的抽象方法覆盖/实现/重写
做法是可以将方法复制粘贴到子类中然后把abstract去掉

二.接口

接口也是一种引用类型,可以等同看作类

1.语法:

【修饰符】 interface 接口名{}

2.注意点:

①接口中只能出现常量(都是public static final修饰,可以省略不写)、抽象方法(都是public abstract修饰,也可以省略不写)

public interface A{
public static final string SUCCESS = "success";
}

②接口其实是一个特殊的抽象类,特殊在接口是完全抽象的,而抽象类是半抽象。
③接口中无构造方法无法被实例化
④接口和接口之间可以多继承

比如

interface E extends B,C,D{
}

一个类可以实现多个接口,这里的实现可以等同看作继承
注意:必须用implements修饰,implements是实现的意思,是一个关键字,和extends意义相同,当然别忘了下面那一条,需要实现/重写/覆盖

比如

class MyClass implements B,C{
}

⑥一个非抽象的类实现接口,需要将接口中的所有方法实现/重写/覆盖

3.作用:

①使项目分层,所有层都面向接口开发,开发效率提高了(比如分成主方法和接口的实现类两层,可以使用多态,面向接口调用)

比如

jieKou a = new jieKouimplementsClass;
a.m();

这个时候虽然写的是调用接口类的抽象函数(编译阶段),但是实际上调用的是实现类的同名函数(运行阶段)。这个知识点在多态部分讲过。
就类似于灯泡和灯口,中间有一个接口,灯泡坏了就换个灯泡,只要是面向接口的,适合这个接口,就完全没问题。
②接口使代码和代码之间耦合度降低。
就像内存条和主板的关系,变得“可插拔”,可以随意切换。

4.选择

如果抽象类和接口都能满足要求,那优先选择接口。
因为接口可以多实现,多继承。
并且一个类除了实现接口之外,还可以去继承其他类(保留了类的继承

你可能感兴趣的:(Java学习9 2020-02-14)