抽象类的介绍与题目练习
1. 定义
- 抽象类是一种不能被实例化的类,在Java中使用 abstract 关键字来声明。抽象类的主要目的是为它的子类提供一个通用的模板,定义一些子类必须实现的方法。
2. 特点 - 包含抽象方法:抽象类可以包含抽象方法。抽象方法是只有方法签名而没有方法体的方法,就像上面 Shape 类中的 area() 方法。
- 不能被实例化:你不能直接创建抽象类的对象。例如, Shape s = new Shape(); 是不合法的。
- 可以有非抽象方法和成员变量:抽象类除了抽象方法外,还可以有具体的方法(有方法体的方法)和成员变量。
3. 作用 - 代码复用:抽象类可以定义一些通用的行为和属性,子类可以继承这些属性和方法,减少代码重复。
- 定义规范:通过抽象方法,抽象类可以强制子类实现某些方法,保证子类具有某些特定的行为。例如,在图形相关的程序中,所有图形类(如圆形、矩形等)都必须实现计算面积的方法。
题目练习:
PetShop.JAVA
点击查看代码
import java.util.ArrayList;
public class PetShop {
private ArrayList<Pet> pets;
public PetShop(){
pets = new ArrayList<>();
}
public void addPet(Pet pet){
pets.add(pet);
}
public void showPets(){
System.out.println("===宠物展示===");
for (Pet pet : pets) {
System.out.println("宠物名字:" + pet.getName() + ",年龄:" + pet.getAge());
if (pet instanceof Dog) {
((Dog) pet) .bark();
}
else {
((Cat) pet) .mew();
}
}
}
}
Pet.JAVA
点击查看代码
public abstract class Pet {
private String name;
private final int age;
public Pet(String name, int age) {
this.name = name;
this.age = age;
System.out.println("添加了一只宠物,名字:"+getName()+",年龄:"+getAge());
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public abstract void eat();
}
Dog.JAVA
点击查看代码
public class Dog extends Pet{
public Dog(String name, int age) {
super(name, age);
}
public void eat(){
System.out.println(getName()+"在吃猫粮");
}
public void sit(){
System.out.println(getName()+"表演了坐下");
}
public void bark(){
System.out.println(getName()+"的叫声:汪汪!");
}
}
Cat.JAVA
点击查看代码
public class Cat extends Pet{
public Cat(String name, int age) {
super(name, age);
}
public void eat(){
System.out.println(getName()+"在吃猫粮");
}
public void catchMouse(){
System.out.println(getName()+"抓到了一只老鼠");
}
public void mew(){
System.out.println(getName()+"的叫声:喵喵!");
}
}
测试结果