package oo;
public abstract class Animal {
// 下面的两个属性被声明为 public 类型的,而且是静态的
public static final int SCARED = 1;// 情绪好
public static final int COMFORTED = 2;// 情绪不好,烦躁
// 下面的属性被声明为保护类型的,允许在子类中访问
protected boolean mammal = true; // 是否哺乳动物属性
protected boolean carnivorous = true; // 是否食肉动物属性
protected int mood = COMFORTED;// 情绪属性
public boolean isMammal() // 判断是否哺乳动物
{
return (mammal);
}
public boolean isCarnivorous() // 判断是否食肉动物
{
return (carnivorous);
}
public void setMood(int newValue) // 设置情绪值
{
mood = newValue;
}
public int getMood() // 返回情绪值
{
return (mood);
}
public abstract String sayHello(); // 打招呼的方式,该方法是抽象的,所以必须在子类中实现
public abstract String sayHello(int moodval);
}
package oo;
public class Cat extends Animal implements LandAnimal {
// 声明并初始化猫的两个属性
private int numberOfLegs = 4;
// 缺省构造函数
public Cat() {
mammal = true; // 是哺乳动物
carnivorous = true; // 是食肉动物
}
// 重写父类的方法
public String sayHello() {
return ("喵喵叫");
}
public String sayHello(int moodval) {
this.setMood(moodval);
switch (mood) {
case SCARED:
return ("嘶嘶叫");// 如果情绪烦躁的话,就“嘶嘶叫”
case COMFORTED:
return ("咕噜咕噜叫"); // 如果情绪好的话,发出“咕噜咕噜”声
}
return ("喵喵叫"); // 如果情绪好的话,发出“喵~”声
}
// 实现 LandAnimal接口
public int getNumberOfLegs() {
return (numberOfLegs);
}
}
package oo;
public class Dog extends Animal implements LandAnimal {
// 下面的属性被声明为私有的,并初始化。
private int numberOfLegs = 4;
// 缺省构造函数确保属性能够正确设置
public Dog() {
mammal = true; // 是哺乳动物
carnivorous = true; // 是食肉动物
}
// 重写父类的方法
public String sayHello() {
return ("摇摇尾巴");
}
public String sayHello(int moodval) {
this.setMood(moodval);
switch (mood) {
case SCARED:
return ("呜呜叫");
case COMFORTED:
return ("旺旺旺叫");
}
return ("摇摇尾巴");
}
// 实现 LandAnimal接口
public int getNumberOfLegs() {
return (numberOfLegs);
}
}
package oo;
public class Frog extends Animal implements LandAnimal, WaterAnimal {
// 声明并初始化青蛙的四个属性
private boolean gillFlag = true;// 有腮
private boolean laysEggs = true;// 产卵
private int numberOfLegs = 4;
// 缺省构造函数
public Frog() {
mammal = false; // 不是哺乳动物
carnivorous = false; // 不是食肉动物
}
// 重写父类的“打招呼”的方法
public String sayHello() {
return ("呱呱呱");
}
public String sayHello(int moodval) {
this.setMood(moodval);
switch (mood) {
case SCARED:
return ("扑通一声跳入水中");
case COMFORTED:
return ("呱呱呱");
}
return ("呱呱呱");
}
// 实现 WaterAnimal接口
public boolean getGillFlag() {
return (gillFlag);
}
public boolean getLaysEggs() {
return (laysEggs);
}
// 实现 LandAnimal接口
public int getNumberOfLegs() {
return (numberOfLegs);
}
}
package oo;
public interface LandAnimal {
public int getNumberOfLegs(); //返回有多少只脚
}
package oo;
public interface WaterAnimal {
public boolean getGillFlag(); //返回是否有腮
public boolean getLaysEggs(); //返回是否产卵
}
package oo;
public class Test {
public static void main(String[] args) {
// 分别创建3个对象
Dog animal1 = new Dog();
Cat animal2 = new Cat();
Frog animal3 = new Frog();
// Dog
if (animal1.isMammal())
System.out.println("狗是哺乳动物");
else
System.out.println("狗不是哺乳动物");
if (animal1.isCarnivorous())
System.out.println("狗是肉食动物");
else
System.out.println("狗不是肉食动物");
System.out.println("狗通常的情况下,和人打招呼的方式为:" + animal1.sayHello());
System.out.println("狗被抚摸情绪好的时候,打招呼的方式是: " + animal1.sayHello(Animal.COMFORTED));
System.out.println("狗烦躁的时候,会: " + animal1.sayHello(Animal.SCARED));
System.out.println("狗有" + animal1.getNumberOfLegs() + "条腿");
System.out.println();
// Cat
if (animal2.isMammal())
System.out.println("猫是哺乳动物");
else
System.out.println("猫不是哺乳动物");
if (animal2.isCarnivorous())
System.out.println("猫是肉食动物");
else
System.out.println("猫不是肉食动物");
System.out.println("猫通常的情况下,和人打招呼的方式为: " + animal2.sayHello());
System.out.println("猫情绪好的时候会: " + animal2.sayHello(Animal.COMFORTED));
System.out.println("猫烦躁的时候会:" + animal2.sayHello(Animal.SCARED));
System.out.println("猫有" + animal2.getNumberOfLegs() + "条腿");
System.out.println();
// Frog
if (animal3.isMammal())
System.out.println("青蛙是哺乳动物");
else
System.out.println("青蛙不是哺乳动物");
if (animal3.isCarnivorous())
System.out.println("青蛙是肉食动物");
else
System.out.println("青蛙不是肉食动物");
System.out.println("青蛙通常的情况下,打招呼的方式为:" + animal3.sayHello());
System.out.println("青蛙情绪好的时候会: " + animal3.sayHello(Animal.COMFORTED));
System.out.println("青蛙受到惊吓是会:" + animal3.sayHello(Animal.SCARED));
if (animal3.getLaysEggs())
System.out.println("青蛙产卵");
else
System.out.println("青蛙不产卵");
if (animal3.getGillFlag())
System.out.println("青蛙有鳃");
else
System.out.println("青蛙没有鳃");
System.out.println("青蛙有" + animal3.getNumberOfLegs() + "条腿");
}
}
输出结果: