Java入门经典教程:抽象方法和抽象类详解
目录
[什么是抽象方法和抽象类?](什么是抽象方法和抽象类)
[抽象类和具体类的区别](抽象类和具体类的区别)
[抽象方法和普通方法的区别](抽象方法和普通方法的区别)
[抽象类的创建和使用](抽象类的创建和使用)
[抽象方法的实现](抽象方法的实现)
抽象类
抽象类是一种不提供任何实现的类。它只包含抽象方法(即没有实现的),并且不能被实例化。抽象类的目的是为其子类提供一个通用的接口,强制实现者提供特定功能的具体实现。
抽象方法
抽象方法是只声明而不提供具体实现的方法。它出现在抽象类中,并强制子类在继承后提供具体实现。抽象方法具有以下特征:
没有方法体(花括号内为空)
使用abstract关键字修饰
特征 | 抽象类 | 具体类 |
---|---|---|
是否包含抽象方法 | 是 | 否 |
是否可以被实例化 | 否 | 是 |
目的 | 提供通用接口 | 提供具体实现 |
示例:
java
//抽象类Shape
publicabstractclassShape{
publicabstractdoublegetArea();
//具体类Circle
publicclassCircleextendsShape{
privatedoubleradius;
@Override
publicdoublegetArea(){
returnMath.PIMath.pow(radius,2);
特征 | 抽象方法 | 普通方法 |
---|---|---|
是否有方法体 | 否(花括号内为空) | 是(花括号内有代码实现) |
是否使用abstract关键字修饰 | 是 | 否 |
是否强制子类实现 | 是 | 否 |
示例:
java
//抽象方法
publicabstractvoidcalculateArea();
//普通方法
publicvoiddisplayShape(){
System.out.println("Shapeisdisplayed.");
创建抽象类:
使用abstract关键字修饰类声明
提供抽象方法声明但不提供实现
使用抽象类:
不能直接实例化抽象类
必须创建一个具体子类并覆盖所有抽象方法
子类提供抽象方法的具体实现
示例:
java
//抽象类Animal
publicabstractclassAnimal{
publicabstractvoidmakeSound();
//具体子类Dog
publicclassDogextendsAnimal{
@Override
publicvoidmakeSound(){
System.out.println("Woof!");
覆盖抽象方法:
子类必须使用@Override注解覆盖父类的抽象方法
子类必须提供具体的实现代码
实现规则:
子类方法的访问权限不能比父类方法的访问权限低
子类方法的返回值类型必须与父类方法的返回值类型相同或为其子类型
子类方法抛出的异常类型不能比父类方法抛出的异常类型更广
示例:
java
//抽象类Shape
publicabstractclassShape{
publicabstractdoublegetArea();
//具体子类Circle
publicclassCircleextendsShape{
privatedoubleradius;
@Override
publicdoublegetArea(){
returnMath.PIMath.pow(radius,2);
为什么我们使用抽象类?
抽象方法和普通方法有什么共同点吗?
覆盖抽象方法的规则是什么?
举一个使用抽象类和抽象方法的真实世界例子。
关于抽象类和抽象方法,你还有什么疑问吗?