关于抽象类叙述正确的是? ( )
jdk1.8之前
接口
1.多实现
2.变量类型默认且只能为为public static final
3.函数类型默认且只能为public,只能有public类型的静态成员函数
4.非静态成员函数没有方法体,静态成员函数有方法体
5.子类必须实现所有接口函数
6.可以有main方法;可以new一个接口,需要在方法体中实现所有接口函数
7.没有构造器
抽象类
1.单继承
2.变量类型不限(静态变量+非静态变量)
3.函数类型不限(静态函数+非静态函数)
4.非静态函数包含没有方法体的抽象函数. 有方法体的普通函数
5.子类可以不覆写父类的抽象方法,但子类也要申明为抽象类;子类可以选择覆写父类的非抽象方法
6.可以有main方法;不可以new一个抽象类
7.可以有构造器
Jdk1.8
接口中可以有default类型的方法,实现类可以选择实现该方法
意义:默认方法的主要优势是提供一种拓展接口的方法,而不破坏现有代码。另一个优势为该方法是可选的,子类可以根据不同的需求Override或默认实现。
public abstract class B { private String str; public B(String a){ System.out.println("父类已经实例化"); this.str = a; System.out.println(str); } public abstract void play(); }
运行结果如下:public class C extends B{ public C(String c){ super(c); System.out.println("子类已经被实例化"); } @Override public void play() { System.out.println("我实现了父类的方法"); } public static void main(String[] args){ B c = new C("c"); } }
父类已经实例化
c
子类已经被实例化