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()+"的叫声:喵喵!");
- }
- }
复制代码 测试结果
标题代码知识点解析
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()方法是用于模拟狗坐下的动作,调用该方法就会输出相应内容。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |