题目:
青蛙Frog 属性:名字,年龄 行为:吃虫子,蛙泳
狗Dog 属性:名字,年龄 行为:吃骨头,狗刨
兔子Rabbit 属性:名字,年龄 行为:吃胡萝卜
首先根据题目要求分析并画出关系图:
分析:这三类都可归为动物Animal类,且共性有属性中的名字和年龄,行为中都有“吃”,即可以创建父类Animal类,放入属性:名字和年龄,并定义“吃”方法,由于每个类的吃方法都有差异,所以父类中将“吃”方法定义为抽象方法,这样父类Animal也必须定义成抽象类。游泳行为只有青蛙和狗有,不是所有类都具有同时也不是只有一个类具有,这种情况则可以使用接口,在接口中定义游泳方法,仅在青蛙和狗的类中通过implement执行。
接下来开始画图(由下向上):
根据关系图从上往下进行编码:
先编写Animal类
Animal类:
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();
}
再编写接口Swim
Swim接口:
public interface Swim {
//定义抽象方法 游泳
public abstract void swim();
}
继续编写子类(注意extends+父类和implements+接口调用游泳方法)
青蛙Frog类:
public class Frog extends Animal implements Swim {
public Frog() {
}
public Frog(String name, int age) {
super(name, age);
}
@Override
public void eat() {
System.out.println("吃虫子");
}
@Override
public void swim() {
System.out.println("蛙泳");
}
}
狗Dog类:
public class Dog extends Animal implements Swim {
public Dog() {
}
public Dog(String name, int age) {
super(name, age);
}
@Override
public void eat() {
System.out.println("吃骨头");
}
@Override
public void swim() {
System.out.println("狗刨");
}
}
兔子Rabbit类:
public class Rabbit extends Animal {
public Rabbit() {
}
public Rabbit(String name, int age) {
super(name, age);
}
@Override
public void eat() {
System.out.println("吃胡萝卜");
}
}
最后编写测试类:
测试类Test:
public class Test {
public static void main(String[] args) {
//创建青蛙对象
Frog f = new Frog("小蛙", 1);
f.eat();
f.swim();
System.out.println(f.getName() + ", " + f.getAge());
//创建狗对象
Dog d = new Dog("大黄", 2);
d.eat();
d.swim();
System.out.println(d.getName() + ", " + d.getAge());
//创建兔子对象
Rabbit r = new Rabbit("小白兔", 3);
r.eat();
System.out.println(r.getName() + ", " + r.getAge());
}
}