第一:抽象类是否可继承实体类?
答:抽象类是可以继承实体类,但前提是实体类必须有明确的构造函数
其实从Object就是个实体类,java的API文档里,每个抽象类的条目里都明确写着直接或间接继承自Object,所以这点是没有疑问的。
关键在于这答案里所说的“前提是实体类必须有明确的构造函数”一句,是什么意思。
一般学习者会写的简单试验代码:
class A{}
abstract class B extends A{}
结果完全正常,编译通过。似乎和“实体类必须有明确的构造函数”完全没有关系。
这个问题涉及到两个个基础知识:
1.
所有的class都必须有一个构造方法,如果你没有在代码里声明构造方法,系统会自动给你生成一个公有无参的构造方法。而只要你自己声明了一个构造方法,无论有参无参,私有公有,系统就不再帮你生成默认无参构造器了。
2.
所有的子类构造器都要求在第一行代码中调用父类构造器,如果不写,系统默认去调用父类的无参构造器。
所以,如果把系统默认配给的方法也算进去,class A{}的代码实际上是
class A{
public A(){}
}
B继承 A 的时候,则是
abstract class B extends A{
public B(){
super();
}
}
第二:接口是否可继承接口?
答:接口与接口之间存在多继承看代码,为什么能多继承因为接口都没方法体所以可以随便用无所谓
interface A
{
void methodA();
}
interface B
{
void methodB();
}
interface C extends B,A
{
void methodC();
}
class D implements C
{
public void methodA(){}
public void methodC(){}
public void methodB(){}
}
第三:.抽象类可以实现接口..比如java.util中的AbstractCollection类就是实现的Collection接口
接口是一个特殊的抽象类,这个抽象类所有的方法都是抽象方法。抽象方法不可以实现。
一个抽象类对抽象方法可有可无,实体方法也可有可无。
抽象类可以继承接口,可以定义接口中的方法为实体方法时就可以实现了。定义为抽象方法的话就需要子类实现,和接口类似。 |