抽象类和抽象方法

  • 一、前言
  • 二、抽象方法
  • 1.定义
  • 2.简单记忆方法
  • 3.代码格式
  • 4.使用说明
  • 三、抽象类
  • 1.定义
  • 2.代码格式
  • 3.使用说明
  • 4.注意点
  • 四、小练习
  • 1.题目
  • 2.分析
  • 3.代码实现
  • 1️⃣父类
  • 2️⃣Frog类
  • 3️⃣Dog类
  • 4️⃣Rabbit类
  • 5️⃣测试类
  • 五、结语


一、前言

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

二、抽象方法

1.定义

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

2.简单记忆方法

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

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

3.代码格式

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

例如

public abstract void eat();]

4.使用说明

如果要继承父类中的抽象方法,则必须重写该方法,否则就让子类也变为抽象类

示例:

如何调用java实体类中的抽象函数_jvm

如果想要偷懒的话,点击 Alt+Enter来查看解决方法

如何调用java实体类中的抽象函数_抽象方法_02


我们在这里选择第二个,实现方法

如何调用java实体类中的抽象函数_jvm_03


一个是父类中的抽象方法,另一个一个是接口(这个下一篇文章中会讲到)我们只需要全选然后点击回车就会自动帮我们生成重写的方法了

如何调用java实体类中的抽象函数_java_04


此时我们只要改写方法体即可

三、抽象类

1.定义

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

2.代码格式

abstract class 类名 { 

}

例如:

abstract class Student { 

}

3.使用说明

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

4.注意点

  1. 抽象类不能实例化
  2. 如何调用java实体类中的抽象函数_c++_05

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

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

  1. 当我们在一个非抽象的类中写抽象方法时,会报错
  2. 如何调用java实体类中的抽象函数_java_06

  3. 但是在抽象类中写非抽象方法,又不会报错
  4. 如何调用java实体类中的抽象函数_java_07

  5. 抽象类的子类,必须重写抽象父类中所有的抽象方法,否则子类也必须定义成抽象类,编译无法通过而报错。
  6. 如何调用java实体类中的抽象函数_抽象方法_08

四、小练习

1.题目

属性

行为

青蛙Frog

名字、年龄(1)

吃虫子、喝水

狗Dog

名字、年龄(2)

吃骨头、喝水

兔子

名字、年龄(3)

吃胡萝卜、喝水

2.分析

如何调用java实体类中的抽象函数_jvm_09


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("喝水");
	}

}

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("小青蛙喝水");
    }
}

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("小狗喝水");
    }
}

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("小狗喝水");
    }
}

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();
    }
}

五、结语

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