abstract 的理解
abstract(抽象)可以修饰类、方法
如果将一个类设置为abstract,则此类必须被继承使用。此类不可生成对象,必须被继承使用。
abstract 和 static 不能放在一起,否则便会出现错误。(这是因为static不可被覆盖,而abstract为了生效必须被覆盖。)
abstract 和 final 不能放在一起,否则便会出现错误。
抽象类的意义
为其子类提供一个公共的类型 封装子类中得重复内容 定义抽象方法,子类虽然有不同的实现 但是定义是一致的
接口特性
接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错)。
接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误)。
接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。
接口的意义
提供一个规范,要求类必须实现指定的方法。
解决 Java 中的单继承问题,可以用接口来实现多继承的功能,简单化多重继承中继承树的复杂程度。
增强程序的扩展性。
抽象类和接口的区别
抽象类中的方法可以有方法体,就是能实现方法的具体功能,但是接口中的方法不行。
抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的。
接口中不能有静态代码块以及静态方法(用 static 修饰的方法),而抽象类中可以有静态代码块和静态方法。注意:Java 8的新特性允许接口中存在静态方法。
一个类只能继承一个抽象类,而一个类却可以实现多个接口。
接口中不能有构造函数和main方法;而抽象类中可以有。
接口与类的区别
接口不能用于实例化对象。
接口没有构造方法。
接口中所有的方法必须是抽象方法。
接口不能包含成员变量,除了 static 和 final 变量。
接口不是被类继承了,而是要被类实现。
接口支持多重继承。
接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concreteclass)?
接口可以继承接口。但是要使用extends,而不是用implements。
抽象类可以实现接口。
比如java.util中的AbstractCollection类就是实现的Collection接口。
抽象类可以继承实体类。
eg:
interface MyInterface {}
interface AnotherInterface extends MyInterface {}
class EntityClass {}
abstract class AbstractClass extends EntityClass implements MyInterface {}