logo资料库

继承与多态.docx

第1页 / 共20页
第2页 / 共20页
第3页 / 共20页
第4页 / 共20页
第5页 / 共20页
第6页 / 共20页
第7页 / 共20页
第8页 / 共20页
资料共20页,剩余部分请下载后查看
实验报告 一. 实验名称 继承与多态 二. 实验目的及要求 1) 设计类之间的继承关系 2) 在子类重写从父类继承的方法 3) 理解什么是多态 4) 掌握继承的设计技巧 三. 实验环境 IntelliJ IDEA Community Edition 2019.2.2 四. 实验内容 对某动物园的动物进行面向对象建模,需要利用面向对象中的继承和多态来设计 类。 动物园包括的动物、动物类型以及他们的继承关系主要如下图所示: (注意:这是一个简化的动物分类方法,详细的动物分类请使用维基百科搜索动物分类学) 图 4.1 动物类的继承关系 五. 实验过程及实验结果 1)创建一个动物(Animal)类 ①给 animal 定义 name(姓名),age(年龄),gender(性别)三个属性; ②实现 equals 方法判断两个动物的 name、age 以及 gender 是否相同,并通过 hashCode 方法验证(当 equals 返回 true 时,则它们对应的 hashCode 必定相等);
③添加 getName、getAge、getGender 方法方便其他类的调用; ④添加三个抽象类方法,eat、drink 和 sleep; 代码如下: import java.util.Objects; public abstract class Animal { private String name; private int age; public static final int FEMALE = 1; public static final int MALE = 0; public int gender; //性别 public Animal(String n, int a, int g) { name = n; age = a; this.gender = g; } @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof Animal)) return false; Animal animal = (Animal) o; return getAge () == animal.getAge () && getGender () == animal.getGender () && Objects.equals (getName (), animal.getName ()); } @Override public int hashCode() { return Objects.hash (getName (), getAge (), getGender ()); } public String getName() { return name; } public int getAge(){ return age;
} public static int getFEMALE() { return FEMALE; } public static int getMALE() { return MALE; } public int getGender() { return gender; } public void setGender(int gender) { this.gender = gender; } public abstract void eat(); public abstract void drink(); public abstract void sleep(); } 2)创建一个哺乳动物(Mammalia)类,继承动物(Animal)类 ①添加 toString 方法,返回哺乳动物的 name、age 以及 gender; ②哺乳动物都会分泌乳汁(lactate),添加新的方法 lactate; ③哺乳动物可以进行胎生(vivipation),添加新的方法 vivipation; 代码如下: public abstract class Mammalia extends Animal { //哺乳动物 //如果父类Animal的构造函数进行了修改,这里也需要进行修改 public Mammalia(String n,int a,int g) { super(n,a,g); this.gender = g;
} @Override public String toString() { if(gender == 1) return "动物的名字是"+getName ()+",年龄" + getAge () +"岁"+ ",性别是雌"; else return "动物的名字是"+getName ()+",年龄" + getAge () +"岁"+ ",性别是雄"; } public void lactate() { //哺乳 if(gender==1) { System.out.println (super.getName () + "正在分泌乳汁"); } else System.out.println (super.getName () + "不分泌乳汁"); } public void vivipation(){ //胎生 if(gender==1) System.out.println (super.getName () + "可以胎生"); else System.out.println (super.getName () + "不可以胎生"); } } 3)创建一个爬行动物(Reptilia)类,继承动物(Animal)类 ①添加 toString 方法,返回爬行动物的 name、age 以及 gender; ②爬行动物都用肺呼吸,添加新的方法(breath); ③爬行动物都是变温动物,添加新的方法(temperature); 代码如下: public abstract class Reptilia extends Animal{ //爬行动物 public Reptilia(String n,int a,int g) {
super(n,a,g); this.gender = g; } @Override public String toString() { if(gender == 1) return "动物的名字是"+getName ()+",年龄" + getAge () +"岁"+ ",性别是雌"; else return "动物的名字是"+getName ()+",年龄" + getAge () +"岁"+ ",性别是雄"; } public void breath() { //哺乳 System.out.println (super.getName () + "用肺呼吸"); } public void temperature() { System.out.println (super.getName () + "是变温动物"); } } 4)创建一个鸟类(Bird)类,继承动物(Animal)类 ①添加 toString 方法,返回鸟类的 name、age 以及 gender; ②鸟类都有羽毛,添加新的方法(yumao); ③鸟类靠取食靠喙,添加新的方法(qushi); 代码如下: public abstract class Bird extends Animal{ //鸟类 public Bird(String n,int a,int g) { super(n,a,g); this.gender = g; } @Override public String toString() {
if(gender == 1) return "动物的名字是"+getName ()+",年龄" + getAge () +"岁"+ ",性别是雌"; else return "动物的名字是"+getName ()+",年龄" + getAge () +"岁"+ ",性别是雄"; } public void yumao() { //羽毛 System.out.println (super.getName () + "有羽毛"); } public void qushi() { //取食 System.out.println (super.getName () + "取食靠喙"); } } 5)创建老虎(Tiger)类,继承哺乳动物(Mammalia)类 ①覆盖 animal 的抽象方法(eat、drink、sleep); ②添加新的方法力量(strength)和是否成年(grow); 代码如下: public class Tiger extends Mammalia { //老虎 public Tiger(String n,int a,int g) { super(n,a,g); this.gender = g; } @Override public void eat() { System.out.println(super.getName () + "正在吃肉"); } @Override public void drink() { System.out.println(super.getName() + "正在大口喝水");
} @Override public void sleep() { System.out.println(super.getName() + "正在贪睡"); } public void strength(){ if(gender==0) System.out.println (super.getName () + "力量较大"); else System.out.println (super.getName () + "力量较小"); } public void grow(){ if(getAge ()>=3) System.out.println (super.getName () + "已经成年"); else System.out.println (super.getName () + "未成年"); } } 6)创建熊猫(Panda)类,继承哺乳动物(Mammalia)类 ①覆盖 animal 的抽象方法(eat、drink、sleep); 代码如下: public class Panda extends Mammalia{ //熊猫 public Panda(String n,int a,int g) { super(n,a,g); this.gender = g; } @Override public void eat() { System.out.println(super.getName () + "正在吃竹子"); } @Override public void drink() {
System.out.println(super.getName() + "正在喝水"); } @Override public void sleep() { System.out.println(super.getName() + "正在眯着黑眼圈睡觉"); } } 7)创建河马(Hippopotamus)类,继承哺乳动物(Mammalia)类 ①覆盖 animal 的抽象方法(eat、drink、sleep); ②实现接口游泳(swimmable)的具体方法; 代码如下: public class Hippopotamus extends Mammalia implements Swimmable{ //河马 public Hippopotamus(String n,int a,int g) { super(n,a,g); this.gender = g; } @Override public void eat() { System.out.println(super.getName () + "正在吃水生草类"); } @Override public void drink() { System.out.println(super.getName() + "正在吃水"); } @Override public void sleep() { System.out.println(super.getName() + "正在浅水睡觉"); } public void swimmable(){ System.out.println ("河马游泳"); }
分享到:
收藏