接口和抽象类的区别

推荐这篇文章

前面

java version "1.8.0_172"
Java(TM) SE Runtime Environment (build 1.8.0_172-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.172-b11, mixed mode)

抽象类

代码如下:

public abstract AbstractTest {
    ...
}

定义

抽象:
不具体的。
抽象方法:
没有方法体的方法。
抽象类:
abstract修饰的类。

注意事项

1. 抽象类不能创建对象。

如果抽象类可能创建对象的话,使用该对象调用抽象方法,
但是抽象方法没有方法体,这样就没有意义。

2. 抽象类中也有构造方法。

抽象类中的构造方法,是供非抽象子类创建对象时,
初始化父类成员属性的时候使用的。

3. 抽象类中不一定包含抽象方法,但包含抽象方法的类一定是抽象类。

不包含抽象方法的抽象类,其目的可能就是避免创建父类对象,
可以用于一些特殊的类结构。

4. 非抽象子类必须要重写并实现抽象父类中的抽象方法。

1,如果没有重写父类抽象方法,子类对象调用该抽象方法,
并没有意义。

5. 如果抽象父类的子类同为抽象类,那么子类可以不实现抽象方法。

接口

代码格式如下:

public interface InterfaceTest {
    ...
}

定义

接口是规范,定义的是一组规则。
会被编译为.class文件,但并不是类,而是一种特殊的引用类型。

接口中的成员

接口定义的是多个类的共同的行为规范,是与外部交流的通道,这就意味着,接口中定义的多是共同的方法。

JDK1.8之前

1. 公共的静态的变量:其中publi final static 可以省略。
2. 公共的抽象方法:其中public abstract可以省略

JDK1.8

3. 公共的默认方法:其中public可以省略,但default不能省略。
4. 公共的静态的方法。public可以省略,但static不能省略。

JDK1.9

5. 私用方法

6. 除此之外,接口中不能有其他成员,没有构造器,没有初始化块,因为接口中没有成员变量需要初始化。

注意事项

1. 接口不能创建对象。
2. 接口的实现类为非抽象类的话,必须要重写接口中所有的抽象方法。
3. 默认方法可以保留,也可以被重写。
4. 静态方法不能被重写。

抽象类和接口的区别

1. 定义的关键字不同。 抽象类:abstract,接口:interface

2. 子接口在初始化的时候,父接口不必先初始化。

3. 接口中没有构造器,和普通方法。

4. 子接口:implement,子类:extends。接口被称为实现,类称为继承。

5. 接口可以多实现,即实现多个接口,但类只能继承一个。

补充

1. 类可以同时继承一个类,并实现一个接口。 但继承的类必须放在实现接口的前面。
2. 如果一个类实现的多个接口中,有共同的方法,那么该方法必须要重写。
3. 如果一个类同时继承的父类,极其实现的接口中包含同一个方法,那么将会调用继承来的方法。
4. 同3,如果接口和类中包含共同的属性,那么必须要指定一个属性。

你可能感兴趣的:(Java,抽象类,java,多态,接口)