java面向对象抽象类


Java 中的抽象类是一种特殊类型的类,它不能直接被实例化,而是被设计用来被继承和扩展。抽象类可以包含抽象方法,这些方法没有具体的实现,而是需要在子类中实现。子类必须实现所有的抽象方法才能被实例化。

定义抽象类的语法是在类名前面添加关键字 abstract,例如:

public abstract class Animal {
  public abstract void makeSound();
}

在上面的例子中,Animal 类是一个抽象类,它定义了一个抽象方法 makeSound()。这个方法没有具体的实现,因为不同种类的动物会有不同的声音,所以它需要在子类中实现。

当子类继承抽象类时,如果没有实现所有的抽象方法,则该子类也必须被定义为抽象类。例如:

public abstract class Mammal extends Animal {
  public abstract void giveBirth();
}

public class Dog extends Mammal {
  public void makeSound() {
    System.out.println("Woof!");
  }
  public void giveBirth() {
    System.out.println("Giving birth to puppies!");
  }
}

在上面的例子中,Mammal 类继承自 Animal 类,并定义了一个新的抽象方法 giveBirth()。由于它没有实现 makeSound() 方法,所以也被定义为抽象类。而 Dog 类继承自 Mammal 类,并实现了所有的抽象方法,因此它可以被实例化。

抽象类的一个重要作用是强制要求子类实现某些方法。这可以帮助程序员避免遗漏必要的方法实现,从而提高代码的可靠性和可维护性。

另外,抽象类还可以包含非抽象方法,这些方法具有默认实现,并且可以被子类继承和覆盖。例如:

public abstract class Shape {
  public abstract double area();

  public void printInfo() {
    System.out.println("This is a shape.");
  }
}

public class Rectangle extends Shape {
  private double width;
  private double height;

  public Rectangle(double width, double height) {
    this.width = width;
    this.height = height;
  }

  public double area() {
    return width * height;
  }
}

public class Circle extends Shape {
  private double radius;

  public Circle(double radius) {
    this.radius = radius;
  }

  public double area() {
    return Math.PI * radius * radius;
  }

  public void printInfo() {
    System.out.println("This is a circle with radius " + radius + ".");
  }
}

在上面的例子中,Shape 类是一个抽象类,它定义了一个抽象方法 area() 和一个非抽象方法 printInfo()。Rectangle 和 Circle 类继承自 Shape 类,并实现了 area() 方法,同时也可以覆盖 printInfo() 方法以提供更具体的信息。

总之,Java 中的抽象类是一种非常有用的概念,它可以帮助我们建立一个类的框架,规定必须实现的方法,从而增加代码的可重用性和可扩展性。


原文链接:codingdict.net