• Java练习题——抽象类、方法以及接口


    一、前言

    一道题检测你是否掌握了抽象类、抽象方法和接口,相关知识点请在【Java进阶学习篇】中点击查看

    二、题目

    请编写带有抽象类标准的Javabean类,要求如下

    属性行为
    青蛙Frog名字(小青蛙)、年龄(1)吃虫子、蛙泳
    狗Dog名字(小狗)、年龄(2)吃骨头、狗刨式游泳
    兔子名字(小白兔)、年龄(3)吃胡萝卜

    三、题目分析

    1.画图

    在这里插入图片描述

    2.接口

    由于兔子不会游泳,并且青蛙和狗都是不同泳姿,所以swim是接口

    public interface Swim {
        public abstract void swim();
    }
    
    
    • 1
    • 2
    • 3
    • 4

    3.抽象方法

    由于三种动物都有吃的行为,但是吃的不一样,所以eat是抽象方法

    public abstract void eat();
    
    • 1

    4.继承关系

    由于三种动物都有共同属性:名字和属性,并且有共同行为:吃,所以只需要在共同父类(Animal)中编写标准Javabean类即可

    5.重写方法

    在子类中,对于接口和抽象方法要进行方法体的重写,且要继承属性

    四、代码实现

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

    2.接口

    public interface Swim {
        public abstract void swim();
    }
    
    
    • 1
    • 2
    • 3
    • 4

    3.青蛙

    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 swim() {
            System.out.println("蛙泳");
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    4.小狗

    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 swim() {
            System.out.println("狗刨式游泳");
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    5.兔子

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

    6.测试类

    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.swim();
            System.out.println("---------------");
    
            Dog g = new Dog("小狗",2);
            System.out.println(g.getName() + "今年" + g.getAge() + "岁\n它的行为有:");
            g.eat();
            g.swim();
            System.out.println("---------------");
    
            Rabbit r = new Rabbit("小白兔",3);
            System.out.println(r.getName() + "今年" + r.getAge() + "岁\n它的行为有:");
            r.eat();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    五、测试代码

    在这里插入图片描述

    六、结语

    在写子类时一定要记得重写方法,并且要继承属性,否则在测试类中将无法给子类对象赋值

  • 相关阅读:
    标准库unsafe:带你突破golang中的类型限制
    Python二级题:MOOC学校名单|关键词提取和查找
    从零实现自动求导以及线性回归实例
    JavaScript是如何实现模块化的?
    P3643 [APIO2016] DP
    【Mybatis】使用PageHelper进行分页查询
    论人机关系
    【RKNN】YOLO V5中pytorch2onnx,pytorch和onnx模型输出不一致,精度降低
    Node.js精进(10)——性能监控(下)
    一些关于通信拓扑、图论的内容笔记
  • 原文地址:https://blog.csdn.net/Alita233_/article/details/126696201