关于接口和抽象类的区别,说法正确的是
抽象类和接口中只能定义静态变量
抽象类和接口中都只能定义抽象方法
抽象类具备构造方法,接口中没有构造方法
抽象类和接口两者都是,只允许单继承
接口和抽象类的区别:
抽象类:
抽象类中可以定义抽象方法外也可以定义构造器,可以包含静态方法静态变量,以及普通方法普通变量,总之就只是失去创建对象的能力,除此之外,普通类有的,抽象类都具备;
一个类只能继承一个抽象类;
有抽象方法的类必须声明为抽象类,而抽象类未必要有抽象方法;
抽象类中抽象方法的访问类型可以是public、protected和default。
接口:
JDK7之前,接口中的只能定义常量和抽象方法。
JDK8之后,接口中可以有默认方法,静态方法,JDK9又新增私有方法等非抽象方法。
接口中不能定义构造方法。
一个类可以实现多个接口。
抽象方法默认都是 public abstract 修饰的,可以省略不写。
常量默认都是 public static final修饰的,可以都省略不写也可任意省略哪个。
相同点:
都不能被实例化。
一个类如果继承了某个抽象类或者实现了某个接口,都需要对其中的抽象方法全部进行实现,否则该类仍需要被声明为抽象类。
作用区别:
1.抽象类可以被子类继承,而且只能单继承。
2.接口可以被子类实现,而且支持多实现;接口也可以被其他接口继承,而且是多继承。
抽象类:
抽象类中可以定义抽象方法外也可以定义构造器,可以包含静态方法静态变量,以及普通方法普通变量,总之就只是失去创建对象的能力,除此之外,普通类有的,抽象类都具备;
一个类只能继承一个抽象类;
有抽象方法的类必须声明为抽象类,而抽象类未必要有抽象方法;
抽象类中抽象方法的访问类型可以是public、protected和default。
接口:
JDK7之前,接口中的只能定义常量和抽象方法。
JDK8之后,接口中可以有默认方法,静态方法,JDK9又新增私有方法等非抽象方法。
接口中不能定义构造方法。
一个类可以实现多个接口。
抽象方法默认都是 public abstract 修饰的,可以省略不写。
常量默认都是 public static final修饰的,可以都省略不写也可任意省略哪个。
相同点:
都不能被实例化。
一个类如果继承了某个抽象类或者实现了某个接口,都需要对其中的抽象方法全部进行实现,否则该类仍需要被声明为抽象类。
作用区别:
1.抽象类可以被子类继承,而且只能单继承。
2.接口可以被子类实现,而且支持多实现;接口也可以被其他接口继承,而且是多继承。