一、前言
一道题检测你是否掌握了抽象类、抽象方法和接口,相关知识点请在【Java进阶学习篇】中点击查看
二、题目
请编写带有抽象类标准的Javabean类,要求如下
属性 |
行为 | |
青蛙Frog | 名字(小青蛙)、年龄(1) | 吃虫子、蛙泳 |
狗Dog | 名字(小狗)、年龄(2) | 吃骨头、狗刨式游泳 |
兔子 | 名字(小白兔)、年龄(3) | 吃胡萝卜 |
三、题目分析
1.画图
2.接口
由于兔子不会游泳,并且青蛙和狗都是不同泳姿,所以swim是接口
public interface Swim { public abstract void swim(); }
3.抽象方法
由于三种动物都有吃的行为,但是吃的不一样,所以eat是抽象方法
public abstract void eat();
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(); }
2.接口
public interface Swim { public abstract void swim(); }
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("蛙泳"); } }
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("狗刨式游泳"); } }
5.兔子
public class Rabbit extends Animal{ public Rabbit(String name, int age) { super(name, age); } @Override public void eat() { System.out.println("吃胡萝卜"); } }
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(); } }
五、测试代码
六、结语
在写子类时一定要记得重写方法,并且要继承属性,否则在测试类中将无法给子类对象赋值