(1)抽象方法:
抽象方法是一种在Java中定义在抽象类或接口中的方法,它没有具体的实现代码。抽象方法只包含方法的声明,没有方法体。它用于定义一种规范或契约,要求任何继承或实现这个抽象类或接口的子类都必须提供该抽象方法的具体实现。
抽象方法的主要特点包括:
-
没有方法体: 抽象方法只有方法的声明,没有具体的实现代码,用关键字
abstract
标识。 -
必须在抽象类或接口中声明: 抽象方法必须在抽象类或接口中声明,这意味着这个类或接口本身也必须是抽象的。
-
继承和实现: 任何继承了抽象类或实现了接口的子类都必须提供抽象方法的具体实现。
抽象方法的目的是为了定义一种行为的规范,让不同的子类提供自己的实现,从而实现多态性和灵活性。它使得在父类或接口中定义一些通用的行为,而具体的细节由子类来完成。
abstract class Animal {
abstract void makeSound(); // 抽象方法,声音的规范
}
class Dog extends Animal {
@Override
void makeSound() {
System.out.println("Woof woof!");
}
}
class Cat extends Animal {
@Override
void makeSound() {
System.out.println("Meow meow!");
}
}
(2)抽象类:
1、 抽象类(Abstract Class):抽象类是一种不能实例化的类,它可以包含抽象方法和非抽象方法。抽象类用于定义一组共同的属性和方法,供其子类继承和实现。抽象方法在抽象类中没有具体的实现,需要在其子类中进行重写。抽象类的主要作用是为其子类提供通用的行为和结构,同时强制子类实现特定的方法。
抽象类的主要特点包括:
-
不能被实例化: 抽象类不能直接创建对象,它需要被子类继承后才能使用。
-
可以包含抽象方法: 抽象类可以包含抽象方法,这些方法只有方法声明没有具体实现。子类继承抽象类时,必须提供抽象方法的具体实现。
-
可以包含非抽象方法: 抽象类也可以包含普通的方法,这些方法有具体的实现。子类继承抽象类时,可以直接继承非抽象方法的实现。
-
用于模板设计: 抽象类常用于定义一些通用的方法和属性,然后由子类根据具体情况进行细化和实现。
抽象类的一个典型应用是在定义一些基础的框架和模板,让子类根据具体需求进行定制。抽象类使得代码的重用性更高,同时也能保持代码的一致性和规范性。
注意:抽象类中不一定有抽象方法,但是有抽象方法的类一定是抽象类。
抽象类的子类,要么重写抽象类中的所有抽象方法,要么是抽象类
abstract class Shape {
protected String color; // 抽象类的属性
public Shape(String color) {
this.color = color;
}
abstract double area(); // 抽象方法,子类需要提供具体实现
void displayInfo() {
System.out.println("This is a " + color + " shape."); // 非抽象方法,有实现
}
}
class Circle extends Shape {
private double radius;
public Circle(String color, double radius) {
super(color);
this.radius = radius;
}
@Override
double area() {
return Math.PI * radius * radius; // 子类实现抽象方法
}
}
class Rectangle extends Shape {
private double width;
private double height;
public Rectangle(String color, double width, double height) {
super(color);
this.width = width;
this.height = height;
}
@Override
double area() {
return width * height; // 子类实现抽象方法
}
}
public class Main {
public static void main(String[] args) {
Circle circle = new Circle("red", 5.0);
circle.displayInfo();
System.out.println("Area: " + circle.area());
Rectangle rectangle = new Rectangle("blue", 4.0, 6.0);
rectangle.displayInfo();
System.out.println("Area: " + rectangle.area());
}
}
在这个例子中,Shape
是抽象类,它有一个抽象方法 area
需要子类实现,还有一个非抽象方法 displayInfo
有实现。Circle
和 Rectangle
类继承了 Shape
类,并实现了抽象方法 area
。这样,我们可以定义不同的形状对象,分别计算其面积并显示信息。