有关于抽象类(Java)

32 阅读3分钟

Java 中的抽象类是一种特殊类型的类,它不能被实例化,只能作为其他类的基类使用。抽象类可以包含抽象方法和非抽象方法,并且可以被子类继承和实现。以下是关于 Java 抽象类的一些知识点和使用方法:

  1. 抽象类的定义:定义一个抽象类需要使用 abstract 关键字来修饰类名,而不是类中的某个方法。抽象类中可以包含抽象方法和非抽象方法,但它们都不能有实现,只能有定义。

例如,下面这个抽象类 Animal 就定义了一个抽象方法 cry():

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

2. 抽象方法的定义和实现:抽象方法是一种没有实现的方法,只有方法的声明,没有方法体。抽象方法必须使用 abstract 关键字来修饰方法名,而且必须定义在抽象类中。子类必须实现抽象类中定义的所有抽象方法,否则子类也必须为抽象类。

例如,下面这个 Cat 类继承了上面的 Animal 类,并实现了 cry() 方法:

public class Cat extends Animal {
    @Override
    public void cry() {
        System.out.println("miaomiao");
    }
}

在实现抽象方法时,必须使用 @Override 注解来标记方法,这样编译器才能够检查出是否正确覆盖了父类中的抽象方法。

  1. 抽象类的特点:抽象类不能被实例化,只能被其他类继承使用。它可以包含非抽象方法,也可以包含私有的实例变量和构造方法。由于抽象类不能被实例化,所以不能直接调用它的构造方法,但是可以使用子类的构造方法来调用它的构造方法。

例如,下面这个 Animal 类就包含了一个非抽象方法 eat() 和一个私有实例变量:

public abstract class Animal {
    private String name;

    public Animal(String name) {
        this.name = name;
    }

    public void eat() {
        System.out.println(name + " is eating.");
    }

    public abstract void cry();
}

在子类 Cat 中,可以使用 super 关键字来调用父类的构造方法,以初始化父类的 name 成员变量:

public class Cat extends Animal {
    public Cat(String name) {
        super(name);
    }

    @Override
    public void cry() {
        System.out.println("miaomiao");
    }
}

4. 抽象类的使用:抽象类通常用于定义一些基本的行为和特征,而具体的行为和特征由子类来实现和拓展。抽象类可以提供一些缺省的实现,以便子类使用,也可以限制子类的实现方式。

例如,Animal 类提供了一个缺省的实现 eat() 方法,在子类中可以使用它来实现更复杂的行为。同时,Animal 类中定义了一个抽象方法 cry(),表示所有的动物都会叫,但是每种动物的叫声都不同,所以必须由子类来实现。

  • 总之,Java 的抽象类是一种非常重要的面向对象编程概念,它可以帮助我们将类的行为和特征分离出来,并提供一些缺省的实现,以便子类使用和拓展。抽象类通常用于定义基本的行为和特征,而具体的行为和特征由子类来实现和扩展。在使用抽象类时,需要注意抽象类不能被实例化,只能被继承使用,子类必须实现父类中的所有抽象方法,否则子类也必须为抽象类。