1个回答
展开全部
抽象类可以extends实体类。其实这就是类之间正常的继承关系。关于构造方法的说明,请看下例:
public class Test1 {
// 本例中所有类的父类
class A {
public A(){} // 这是一个无参构造函数。如果不写这个构造函数,则编译器默认为具有这个构造函数。
public void println() {
System.out.println("我是A的子类或对象,但不是B的子类。");
}
}
// A1类是A的子类
class A1 extends A{
// 这里没有写构造函数,则编译器默认为具有一个无参构造函数。
}
// B是A1的子类,而且它是抽象类,具有抽象方法getName。并且复写了println方法
abstract class B extends A1{
public B(){// 这是一个无参构造函数。如果不写这个构造函数,则编译器默认为具有这个构造函数。
super(); // 它继承了A1,那么此构造函数第一句必须调用父类的构造方法。如果构造函数中没写这句,则编译器默认为调用了父类的无参构造方法。
// 如果父类没有无参构造函数,则必须显式调用父类的构造函数。
}
public abstract String getName();
public void println(){
System.out.println("我是B的子类,我的名字叫:" + getName());
}
}
// B1是B的子类,实现了抽象方法getName
class B1 extends B{
// 这里没有写构造函数,则编译器默认为具有一个无参构造函数;由于它是一个类的子类,所以默认构造方法中的第一句默认为调用父类的构造方法。
public String getName(){
return "B1";
}
}
public void doRun(){
A b1 = new B1();
// 以内部类的方式构造对象
A b2 = new B() {
public String getName() {
return "B2";
}
};
A a = new A();
A a1 = new A1();
b1.println();
b2.println();
a.println();
a1.println();
}
public static void main(String args[]){
Test1 t = new Test1();
t.doRun();
}
}
public class Test1 {
// 本例中所有类的父类
class A {
public A(){} // 这是一个无参构造函数。如果不写这个构造函数,则编译器默认为具有这个构造函数。
public void println() {
System.out.println("我是A的子类或对象,但不是B的子类。");
}
}
// A1类是A的子类
class A1 extends A{
// 这里没有写构造函数,则编译器默认为具有一个无参构造函数。
}
// B是A1的子类,而且它是抽象类,具有抽象方法getName。并且复写了println方法
abstract class B extends A1{
public B(){// 这是一个无参构造函数。如果不写这个构造函数,则编译器默认为具有这个构造函数。
super(); // 它继承了A1,那么此构造函数第一句必须调用父类的构造方法。如果构造函数中没写这句,则编译器默认为调用了父类的无参构造方法。
// 如果父类没有无参构造函数,则必须显式调用父类的构造函数。
}
public abstract String getName();
public void println(){
System.out.println("我是B的子类,我的名字叫:" + getName());
}
}
// B1是B的子类,实现了抽象方法getName
class B1 extends B{
// 这里没有写构造函数,则编译器默认为具有一个无参构造函数;由于它是一个类的子类,所以默认构造方法中的第一句默认为调用父类的构造方法。
public String getName(){
return "B1";
}
}
public void doRun(){
A b1 = new B1();
// 以内部类的方式构造对象
A b2 = new B() {
public String getName() {
return "B2";
}
};
A a = new A();
A a1 = new A1();
b1.println();
b2.println();
a.println();
a1.println();
}
public static void main(String args[]){
Test1 t = new Test1();
t.doRun();
}
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询