Java(18)抽象类

作者:季沐测试笔记
原文地址https://www.cnblogs.com/testero/p/15201625.html
博客主页https://www.cnblogs.com/testero

1. 抽象类的概述

​ 当我们在做子类共性功能抽取时,有些方法在父类中并没有具体的体现,这个时候就需要抽象类了!

​ 在Java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类!

2. 抽象类的特点

  • 抽象类和抽象方法必须使用 abstract 关键字修饰

    //抽象类的定义
    public abstract class 类名 {}
    
    //抽象方法的定义
    public abstract void eat();
    
  • 抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类

  • 抽象类不能实例化

    ​ 抽象类如何实例化呢?参照多态的方式,通过子类对象实例化,这叫抽象类多态

  • 抽象类的子类

    ​ 要么重写抽象类中的所有抽象方法

    ​ 要么是抽象类

3. 抽象类的成员特点

  • 成员的特点

    • 成员变量
      • 既可以是变量
      • 也可以是常量
    • 构造方法
      • 空参构造
      • 有参构造
    • 成员方法
      • 抽象方法
      • 普通方法
  • 代码演示

    • 动物类
    public abstract class Animal {
    
        private int age = 20;
        private final String city = "北京";
    
        public Animal() {}
    
        public Animal(int age) {
            this.age = age;
        }
    
    
        public void show() {
            age = 40;
            System.out.println(age);
    //        city = "上海";
            System.out.println(city);
        }
    
        public abstract void eat();
    
    }
    
    • 猫类
    public class Cat extends Animal {
        @Override
        public void eat() {
            System.out.println("猫吃鱼");
        }
    }
    
    • 测试类
    public class AnimalDemo {
        public static void main(String[] args) {
            Animal a = new Cat();
            a.eat();
            a.show();
        }
    }
    

4. 抽象类的案例

  • 案例需求

    ​ 请采用抽象类的思想实现猫和狗的案例,并在测试类中进行测试

  • 代码实现

    • 动物类
    public abstract class Animal {
        private String name;
        private int age;
    
        public Animal() {
        }
    
        public Animal(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public abstract void eat();
    }
    
    • 猫类
    public class Cat extends Animal {
    
        public Cat() {
        }
    
        public Cat(String name, int age) {
            super(name, age);
        }
    
        @Override
        public void eat() {
            System.out.println("猫吃鱼");
        }
    }
    
    • 狗类
    public class Dog extends Animal {
    
        public Dog() {
        }
    
        public Dog(String name, int age) {
            super(name, age);
        }
    
        @Override
        public void eat() {
            System.out.println("狗吃骨头");
        }
    }
    
    • 测试类
    public class AnimalDemo {
        public static void main(String[] args) {
            //创建对象,按照多态的方式
            Animal a = new Cat();
            a.setName("加菲");
            a.setAge(5);
            System.out.println(a.getName()+","+a.getAge());
            a.eat();
            System.out.println("--------");
    
            a = new Cat("加菲",5);
            System.out.println(a.getName()+","+a.getAge());
            a.eat();
        }
    }
    
posted @ 2021-07-29 22:20  季沐测试笔记  阅读(98)  评论(0)    收藏  举报