可以继承,但是和实体类的继承一样,也要求父类可继承,并且拥有子类可访问到的构造器。
class Person
{
Person()
{
System.out.println("抽象类可以继承具体类");
}
}
abstract class Study extends Person
{
abstract void study();
}
class Mike extends Study
{
void study()
{
System.out.println("学习Java");
}
}
class Jock extends Study
{
void study()
{
System.out.println("学习C语言");
}
}
class Parte extends Study
{
void study()
{
System.out.println("学习html");
}
}
class AbstractDemo
{
public static void main(String[] args)
{
Study m = new Mike();
m.study();
Study j = new Jock();
j.study();
Study p = new Parte();
p.study();
}
}
所有的class都必须有一个构造方法,如果你没有在代码里声明构造方法,系统会自动给你生成一个共有无参的构造方法,而你只要自己声明了一个构造方法,无论有参无参,私有公有,系统就不再帮你生成默认无参构造器,所有的子类构造器都要求在第一行中调用父类构造器,如果不写,系统就默认去调用父类的无参构造器。
class A()
{
public A(){}
}
//B继承A的时候,则是
abstract class B extends A
{
public B(){
super();
}
}
//要想知道继承规则的内部情况,在上面加个私有构造器,有无参都行。
classA{
private A(){}
}/*
这个时候系统就不再给你默认的无参构造器,B的构造器去调用super(),找不到A的无参构造器
所以导致abstract class B extends A{}编译不能通过,(因为A中没有任何无参构造器可供子类调用,其实这个时候A只能够提供内部类继承,)