Java中抽象类abstract的知识点总结 | 青训营

153 阅读3分钟

在Java中,abstract关键字用来定义抽象类和抽象方法。抽象类是一种不能被实例化的类,它的主要目的是为了被继承。比如定义一个抽象类人,然后根据人来定义医生,学生,军人等不同的人。

  1. 定义抽象类和抽象方法: 抽象类通过在类名前添加abstract关键字来定义,抽象方法通过在方法签名前添加abstract关键字来定义。抽象方法没有方法体,只有方法的声明。抽象方法必须在抽象类中定义。下面是一个抽象类和抽象方法的示例代码:
abstract class Animal {
    String name;
    
    abstract void sound();
}

class Dog extends Animal {
    void sound() {
        System.out.println("The dog barks.");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal animal = new Dog();
        animal.sound();
    }
}
  1. 抽象类的特点: 抽象类不能被实例化,也就是不能创建抽象类的对象。只有通过子类来创建对象。抽象类可以包含普通属性、普通方法和构造方法。抽象类可以包含抽象方法,也可以不包含抽象方法。如果一个类包含至少一个抽象方法,那么这个类必须声明为抽象类。下面是一个包含抽象方法的抽象类的示例代码:
abstract class Shape {
    String color;
    
    abstract double getArea();
    
    void setColor(String color) {
        this.color = color;
    }
    
    String getColor() {
        return color;
    }
}

class Circle extends Shape {
    double radius;
    
    Circle(double radius) {
        this.radius = radius;
    }
    
    double getArea() {
        return Math.PI * radius * radius;
    }
}

public class Main {
    public static void main(String[] args) {
        Circle circle = new Circle(5);
        circle.setColor("Red");
        System.out.println("Circle area: " + circle.getArea());
        System.out.println("Circle color: " + circle.getColor());
    }
}
  1. 实现抽象方法: 如果一个类继承自抽象类,那么它必须实现抽象类中的所有抽象方法,否则这个类也必须声明为抽象类。抽象类中的抽象方法没有具体的实现,所以子类必须提供方法的具体实现。下面是一个子类实现抽象方法的示例代码:
abstract class Animal {
    String name;
    
    abstract void sound();
}

class Dog extends Animal {
    void sound() {
        System.out.println("The dog barks.");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal animal = new Dog();
        animal.sound();
    }
}
  1. 抽象类的使用场景: 抽象类通常用于定义一些公共的行为或属性,然后由子类来具体实现这些行为或属性。抽象类可以作为一种规范或模板,通过定义抽象方法来要求子类实现某些行为,从而保证各个子类的一致性。下面是一个使用抽象类的示例代码:
abstract class Animal {
    String name;
    
    abstract void sound();
    
    void printName() {
        System.out.println("Name: " + name);
    }
}

class Dog extends Animal {
    void sound() {
        System.out.println("The dog barks.");
    }
}

class Cat extends Animal {
    void sound() {
        System.out.println("The cat meows.");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal dog = new Dog();
        dog.name = "Dog";
        dog.sound();
        dog.printName();
        
        Animal cat = new Cat();
        cat.name = "Cat";
        cat.sound();
        cat.printName();
    }
}

在上述代码中,抽象类Animal定义了一个抽象方法sound()和一个普通方法printName(),并且包含一个属性name。子类Dog和Cat分别继承自Animal,并分别实现了抽象方法sound()。main()方法中创建了Dog和Cat对象,并调用了它们的sound()和printName()方法。