马士兵java架构师

您现在的位置是:架构师问答 >

架构师问答

Java继承抽象类必须实现抽象方法吗? (是的,必须实现)

2023-11-14 15:50:41架构师问答 本文浏览次数:1 百度已收录

本 文 目 录

如果一个非抽象类继承了一个抽象类,那么它必须实现该抽象类中的所有抽象方法。否则,编译会出错。但如果子类也是抽象类,那么它可以选择不实现父类的抽象方法,让继承它的子类去实现。

一、什么是抽象类?

抽象类是不能被实例化的类,通常包含抽象方法和非抽象方法。抽象方法只有声明,没有实现。

二、继承抽象类时需要注意什么?

当一个类继承抽象类时,它必须实现抽象类中的所有抽象方法,除非该类也是抽象类。如果子类只是部分实现了抽象方法,那么子类仍然需要声明为抽象类。

三、抽象类的代码案例

1、如果一个非抽象类继承了一个抽象类,那么它必须实现该抽象类中的所有抽象方法。否则,编译会出错。

// 抽象类定义  
public abstract class AbstractClass {  
    public abstract void method1();  
    public abstract void method2();  
}  

// 非抽象类继承抽象类  
public class ConcreteClass extends AbstractClass {  
    public void method1() {  
        System.out.println("Method 1 implemented");  
    }  
    // method2() 没有被实现  
}
ConcreteClass 是一个非抽象类,它继承了抽象类 AbstractClass。
但是 ConcreteClass 没有实现 AbstractClass 中的所有抽象方法,即 method2() 没有被实现。
因此,这段代码在编译时会出错,因为非抽象类必须实现其抽象父类中的所有抽象方法。

2、但如果子类也是抽象类,那么它可以选择不实现父类的抽象方法,让继承它的子类去实现。

// 抽象类定义  
public abstract class AbstractClass {  
    public abstract void method1();  
    public abstract void method2();  
}  

// 另一个抽象类继承上述抽象类  
public abstract class AnotherAbstractClass extends AbstractClass {  
    public void method1() {  
        System.out.println("Method 1 implemented");  
    }  
    // method2() 没有被实现,但这是可以的,因为 AnotherAbstractClass 仍然是抽象类  
}
AnotherAbstractClass 也是一个抽象类,它继承了 AbstractClass。
虽然 AnotherAbstractClass 只实现了部分抽象方法(即 method1()),但由于 AnotherAbstractClass 本身也是一个抽象类,所以它可以选择不实现父类的所有抽象方法。
这是合法的,因为最终的实现责任会被推到继承 AnotherAbstractClass 的非抽象子类上。
这样的设计可以为某些继承层次结构提供更大的灵活性。