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 方法可能不会被重写。这是出于安全原因而完成的,并且这些方法用于优化。

示例: - 学习 abstractfinal 关键词

步骤 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 类型。