• Java面向对象8——抽象类和抽象方法(知识点+使用方法)


    一、前言

    本文会梳理有关抽象类和抽象方法的知识点,这会运用在接口中,而接口是在实际开发中非常重要的,所以知识点非常重要

    二、抽象方法

    1.定义

    抽象方法就是以abstract修饰的方法,这种方法只声明返回的数据类型、方法名称和所需的参数,没有方法体,也就是说抽象方法只需要声明而不需要实现

    2.简单记忆方法

    概念听起来很复杂难懂,那我们举例说明

    比如有三个人A、B、C的职业都是程序员,到了返点都要吃饭,但是每个人吃的东西不一样,有人吃爱心便当,有人吃盒饭,有人吃快餐,那么他们都有共同的方法:吃,并且他们都可以同属于一个父类:程序员,那么我们可以把共同的方法吃抽取到父类(程序员)中由于子类(ABC三个人)吃的东西不相同,即方法体不同,所以要把该方法定义为抽象方法

    3.代码格式

    修饰符 abstract 返回值类型 方法名 (参数列表)
    • 1

    例如

    public abstract void eat();]
    
    • 1

    4.使用说明

    如果要继承父类中的抽象方法,则必须重写该方法,否则就让子类也变为抽象类
    示例:
    在这里插入图片描述

    如果想要偷懒的话,点击 Alt+Enter来查看解决方法
    在这里插入图片描述
    我们在这里选择第二个,实现方法
    在这里插入图片描述
    一个是父类中的抽象方法,另一个一个是接口(这个下一篇文章中会讲到)我们只需要全选然后点击回车就会自动帮我们生成重写的方法了
    在这里插入图片描述
    此时我们只要改写方法体即可

    三、抽象类

    1.定义

    当某一个类中存在抽象方法,那么这个类就要被定义为抽象类

    2.代码格式

    abstract class 类名 { 
    
    }
    
    • 1
    • 2
    • 3

    例如:

    abstract class Student { 
    
    }
    
    • 1
    • 2
    • 3

    3.使用说明

    继承抽象类的子类必须重写父类所有的抽象方法。否则,该子类也必须声明为抽象类

    4.注意点

    1. 抽象类不能实例化
      在这里插入图片描述

    2. 抽象类中,不一定包含抽象方法,但是有抽象方法的类必定是抽象类。

      理解:未包含抽象方法的抽象类,目的就是不想让调用者创建该类对象,通常用于某些特殊的类结构设计。

      当我们在一个非抽象的类中写抽象方法时,会报错
      在这里插入图片描述
      但是在抽象类中写非抽象方法,又不会报错
      在这里插入图片描述

    3. 抽象类的子类,必须重写抽象父类中所有的抽象方法,否则子类也必须定义成抽象类,编译无法通过而报错。
      在这里插入图片描述

    四、小练习

    1.题目

    属性行为
    青蛙Frog名字、年龄(1)吃虫子、喝水
    狗Dog名字、年龄(2)吃骨头、喝水
    兔子名字、年龄(3)吃胡萝卜、喝水

    2.分析

    在这里插入图片描述
    eat是抽象方法,吃的东西不同,而drink都是喝水,所以不用使得该方法变为抽象方法

    3.代码实现

    1️⃣父类

    public abstract class Animal {
        private String name;
        private int age;
    
        public Animal(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        public Animal() {
        }
    
        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 void drink(){
    		System.out.println("喝水");
    	}
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    2️⃣Frog类

    public class Frog extends Animal implements Swim {
    
        public Frog(String name, int age) {
    
            super(name, age);
        }
    
        @Override
        public void eat() {
            System.out.println("吃虫子");
        }
    
        @Override
        public void drink() {
            System.out.println("小青蛙喝水");
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    3️⃣Dog类

    public class Dog extends Animal implements Swim {
    
        public Dog(String name, int age) {
    
            super(name, age);
        }
    
        @Override
        public void eat() {
    		System.out.println("吃骨头");
        }
    
    	@Override
        public void drink() {
            System.out.println("小狗喝水");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    4️⃣Rabbit

    public class Rabbit extends Animal{
    
        public Rabbit(String name, int age) {
            super(name, age);
        }
    
    
        @Override
        public void eat() {
            System.out.println("吃胡萝卜");
        }
        
    	@Override
        public void drink() {
            System.out.println("小狗喝水");
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    5️⃣测试类

    public class Test {
        public static void main(String[] args) {
    
            Frog f = new Frog("小青蛙",1);
            System.out.println(f.getName() + "今年" + f.getAge() + "岁\n它的行为有:");
            f.eat();
            f.drink();
            System.out.println("---------------");
    
            Dog g = new Dog("小狗",2);
            System.out.println(g.getName() + "今年" + g.getAge() + "岁\n它的行为有:");
            g.eat();
            g.drink();
            System.out.println("---------------");
    
            Rabbit r = new Rabbit("小白兔",3);
            System.out.println(r.getName() + "今年" + r.getAge() + "岁\n它的行为有:");
            r.eat();
            r.drink();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    五、结语

    下一篇文章会讲述有关接口的知识点

  • 相关阅读:
    【用python的标准库画出显示实时时间的数码管】
    # Vue3 setup 函数
    PyTorch搭建LSTM实现服装分类(FashionMNIST)
    SpringBoot 整合Nacos配置中心
    两步、三步与四步时间相移算法实验对比分析
    一个小型公司人工费用核算winform查询开发(1)
    JSON 对象(object)
    关于setInterval和setTimout
    2022年12月编程语言排行榜,数据来了!
    JavaEE在线学习系统的设计与实现
  • 原文地址:https://blog.csdn.net/Alita233_/article/details/126722891