抽象类的介绍与题目练习

1. 定义

  • 抽象类是一种不能被实例化的类,在Java中使用 abstract 关键字来声明。抽象类的主要目的是为它的子类提供一个通用的模板,定义一些子类必须实现的方法。
    2. 特点
  • 包含抽象方法:抽象类可以包含抽象方法。抽象方法是只有方法签名而没有方法体的方法,就像上面 Shape 类中的 area() 方法。
  • 不能被实例化:你不能直接创建抽象类的对象。例如, Shape s = new Shape(); 是不合法的。
  • 可以有非抽象方法和成员变量:抽象类除了抽象方法外,还可以有具体的方法(有方法体的方法)和成员变量。
    3. 作用
  • 代码复用:抽象类可以定义一些通用的行为和属性,子类可以继承这些属性和方法,减少代码重复。
  • 定义规范:通过抽象方法,抽象类可以强制子类实现某些方法,保证子类具有某些特定的行为。例如,在图形相关的程序中,所有图形类(如圆形、矩形等)都必须实现计算面积的方法。

题目练习:

image

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()+"的叫声:喵喵!");
    }
}

测试结果
image

题目代码知识点解析

PetShop类:
使用ArrayList数组存储私有成员变量pets,用于存储宠物对象。addpet()方法用于添加宠物,showPets()方法使用for—each循环遍历获取宠物信息,通过instanceof关键字判断宠物类型并调用相应叫声方法
Pet类:
定义为抽象类,使用abstract关键字修饰,定义了name和age两个私有属性,通过构造函数,用于初始化name和age,通过getName和getAge方法来获取宠物名字和年龄。抽象方法eat,所有继承Pet类的子类都必须实现eat方法。
Cat类:
Cat类继承抽象类Pet。eat()方法重写了基类Pet类中得到eat()方法,目的是体现猫吃猫粮的特定饮食行为,与其他宠物区别开。mew()方法主要是模拟猫发出叫声的行为,在其他地方调用mew方法就会输出宠物名字和叫声。carchMouse()方法是用于模拟猫抓老鼠的动作,调用该方法就会输出相应内容
Dog类:
Dog类继承抽象类Pet。eat()方法重写了基类Pet类中得到eat()方法,目的是体现狗吃狗粮的特定饮食行为,与其他宠物区别开。bark()方法主要是模拟狗发出叫声的行为,在其他地方调用bark方法就会输出宠物名字和叫声。sit()方法是用于模拟狗坐下的动作,调用该方法就会输出相应内容。
posted @ 2024-11-28 13:33  VIP999  阅读(48)  评论(0编辑  收藏  举报