Java 抽象类和方法
抽象类是 Java 中的类,它声明了一个或多个抽象方法。
想一下由 String 类组成的类层次结构,该类由三个类 Rectangle、Circle 和 Triangle 继承。创建 Shape 类是为了保存由三个类 Rectangle、Circle 和 Triangle 共享的公共属性和方法。 calculateArea()
是一个由所有三个子类共享并存在于 Shape 类中的方法。
在本教程中,你将学习 -
- 什么是抽象类?
- 什么是抽象方法?
- Java 中的抽象类和方法重点
- Java 中的最终关键字
现在,假设你编写代码来为上面描述的类创建对象。让我们观察这些物体在实际世界中的外观。
矩形类的一个对象将给出一个矩形,这是我们在日常生活中常见的形状。
三角形类的对象将给出三角形,这也是常见的日常形状。
但是在实际世界中,Shape
类的对象会是什么样子?
如果你观察到 Shape 类用于实现继承和多态的目标。但它不是为实例化而构建的。这些类可以标记为 Abstract
,无法实例化抽象类。
语法:
abstract class Shape{
//code
}
你有可能不会将 Shape 类标记为 Abstract,然后将其实例化。但是这样的对象在你的代码中没用,并且会为潜在的错误打开一个空间。因此这是不可取的。
什么是抽象方法?
抽象方法是一种只包含方法定义但不包含实现的方法。
众所周知,矩形、圆形和三角形的面积计算公式是不同的。 calculateArea()
方法必须由继承类重写。在 Shape 类中定义它是没有意义的,但我们需要确保所有继承类都有这个方法。
这些方法可以标记为 abstract
。
语法:
abstract public void calculateArea();
对于抽象方法,不需要具体实现,仅定义方法的签名。
Java 中的抽象类:重点
-
抽象类也可以有具体(完整)方法。
-
出于设计目的,即使类不包含任何抽象方法,也可以将类声明为抽象类
-
抽象类的引用可以指向其子类的对象,从而实现运行时多态性,比如
Shape obj = new Rectangle();
-
如果一个类有一个或多个抽象方法,则必须强制标记为抽象类。
Java 中的 final
关键字
final
修饰符适用于类、方法和变量。 final
的含义因环境而异,但基本思想是相同的。
final
类不得继承final
变量变为常量,其值无法更改。final
方法可能不会被重写。这是出于安全原因而完成的,并且这些方法用于优化。
示例: - 学习 abstract
和 final
关键词
步骤 1: 将以下代码复制到编辑器中。
abstract class Shape{
final int b = 20;
public void display(){
System.out.println("This is display method");
}
abstract public void calculateArea();
}
public class Rectangle extends Shape{
public static void main(String args[]){
Rectangle obj = new Rectangle();
obj.display();
//obj.b=200;
}
//public void calculateArea(){}
}
步骤 2: 保存、编译和运行代码。
步骤 3: 错误出现的原因是抽象方法未在 Rectangle 类中实现。要修复此问题,请取消注释#15。
步骤 4: 取消注释行#13。保存并编译代码。
步骤 5: 错误出现的原因是变量 b 是 final
类型。