第26天
哪吒 2023/6/15
# 第26天
学习编程要劳逸结合哦,记得多喝水休息眼睛~
# Java 抽象类
抽象类不能被实例化(初学者很容易犯的错),如果被实例化,就会报错,编译无法通过。只有抽象类的非抽象子类可以创建对象。
抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
抽象类中的抽象方法只是声明,不包含方法体,就是不给出方法的具体实现也就是方法的具体功能。
构造方法,类方法(用 static 修饰的方法)不能声明为抽象方法。
抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类。
Java 抽象类是一种特殊的类,它不能被实例化,只能被继承。抽象类通常包含抽象方法,这些方法只有声明而没有实现。子类必须实现这些抽象方法,否则子类也必须被声明为抽象类。
# 实现原理
- 声明抽象类:使用
abstract
关键字声明一个类为抽象类。 - 声明抽象方法:在抽象类中声明抽象方法,这些方法只有方法签名,没有方法体。
- 继承抽象类:其他类通过继承抽象类来获得抽象类的属性和方法。
- 实现抽象方法:子类必须实现抽象类中的所有抽象方法,除非子类也是抽象类。
# 用途
- 定义公共接口:抽象类可以定义一组公共接口,这些接口可以被多个子类共享。
- 提供默认实现:抽象类可以提供一些方法的默认实现,子类可以选择继承这些默认实现,也可以选择重写它们。
- 实现多态:抽象类可以用于实现多态,通过继承抽象类的子类可以有不同的行为。
# 注意事项
- 不能实例化:抽象类不能被实例化,只能被继承。
- 抽象方法:抽象类中可以包含抽象方法,也可以包含普通方法。
- 子类实现:子类必须实现抽象类中的所有抽象方法,除非子类也是抽象类。
- 访问修饰符:抽象类中的抽象方法默认是
public
的,也可以是protected
的,但必须是public
或protected
。
# 示例代码
abstract class Animal {
// 抽象方法
public abstract void makeSound();
// 普通方法
public void eat() {
System.out.println("This animal eats food.");
}
}
class Dog extends Animal {
// 实现抽象方法
public void makeSound() {
System.out.println("Woof! Woof!");
}
}
class Cat extends Animal {
// 实现抽象方法
public void makeSound() {
System.out.println("Meow! Meow!");
}
}
public class Main {
public static void main(String[] args) {
Animal myDog = new Dog();
Animal myCat = new Cat();
myDog.makeSound(); // 输出: Woof! Woof!
myCat.makeSound(); // 输出: Meow! Meow!
}
}
在这个示例中,Animal
是一个抽象类,它定义了一个抽象方法 makeSound()
和一个普通方法 eat()
。Dog
和 Cat
类继承自 Animal
类,并实现了 makeSound()
方法。在 Main
类中,我们创建了 Dog
和 Cat
的实例,并调用了它们的 makeSound()
方法,展示了多态的使用。
恭喜你又完成了一个知识点!下一篇文章已经在向你招手了~