package p03.t03; /** * 功能;动物类 * 作者:刘金花 * 日期:2022 年05月12日 */ public class Animal { private String name; private int 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 void speak() { System.out.println(name + "今年" + age + "岁了。"); } public void move() { System.out.println(name + "在动......"); } public void eat() { System.out.println(name + "在吃......"); } @Override public String toString() { return "Animal{" + "name='" + name + ''' + ", age=" + age + '}'; } }
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 2、继承动物类,创建猫类package p03.t03; /** * 功能;猫类 * 作者:刘金花 * 日期:2022 年05月12日 */ public class Cat extends Animal { /** * 子类改写父类的同名同参方法(纵向多态) */ @Override public void move() { System.out.println("猫咪[" + getName() +"]在爬树。"); } /** * 子类改写父类的同名同参方法(纵向多态) */ @Override public void eat() { System.out.println("猫咪[" + getName() + "]爱吃鱼虾。"); } /** * 子类添加新的方法 */ public void play() { System.out.println("猫咪[" + getName() + "]玩老鼠。"); } }
123456789101112131415161718192021222324252627282930313233 3、继承动物类,创建狗类package p03.t03; /** * 功能;狗类 * 作者:刘金花 * 日期:2022 年05月12日 */ public class Dog extends Animal { /** * 子类改写父类的同名同参方法(纵向多态) */ @Override public void move() { System.out.println("狗崽[" + getName() +"]在走路。"); } /** * 子类改写父类的同名同参方法(纵向多态) */ @Override public void eat() { System.out.println("狗崽[" + getName() + "]爱啃骨头。"); } /** * 子类添加新的方法 */ public void play() { System.out.println("狗崽[" + getName() + "]玩树枝。"); } }
12345678910111213141516171819202122232425262728293031323334 4、继承动物类,创建鸟类package p03.t03;
/**
功能;鸟类
作者:刘金花
日期:2022 年05月12日
/
public class Bird extends Animal{
/*
/**
子类改写父类的同名同参方法(纵向多态)@Override
public void eat() {
System.out.println(“麻雀子[” + getName() + “]爱吃大虫子。”);
}
/**
子类添加新的方法package p03.t03; /** * 功能;学生类 * 作者:刘金花 * 日期:2022 年05月12日 */ public class Student { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public void feed(Animal animal) { animal.move(); //体现多态(子类改写了父类的同名同参方法) animal.eat(); // 体现多态(子类改写了父类的同名同参方法) animal.speak(); // 子类完全继承了父类的方法 if (animal instanceof Cat) { // 判断是否是猫实例 System.out.println(name + "喂养猫咪[" + animal.getName() + "]。"); } else if (animal instanceof Dog) { // 判断是否是狗实例 System.out.println(name + "喂养狗崽[" + animal.getName() + "]。"); } else if (animal instanceof Bird) { //判断是否是鸟实例 System.out.println(name + "喂养麻雀子[" + animal.getName() + "]。"); } else { System.out.println(name + "喂养动物[" + animal.getName() + "]。"); } } }
123456789101112131415161718192021222324252627282930313233343536 6、创建测试学生类 TestStudent类 代码如下:package p03.t03; /** * 功能;测试学生类 * 作者:刘金花 * 日期:2022 年05月12日 */ public class TestStudent { public static void main(String[] args) { // 创建学生对象 Student student = new Student(); student.setName("张三丰"); // 创建第一个动物 Animal animal1 = new Cat(); animal1.setName("白金"); animal1.setAge(3); // 创建第二个动物 Animal animal2 = new Dog(); animal2.setName("胖墩"); animal2.setAge(2); // 创建第三个动物 Animal animal3 = new Bird(); animal3.setName("飞飞"); animal3.setAge(2); // 调用学生对象的喂养方法,传入不同的动物对象 student.feed(animal1); student.feed(animal2); student.feed(animal3); } }
1234567891011121314151617181920212223242526272829303132333435 7、运行程序,查看结果运行TestStudent类
在第十五行、第二十行与第二十五行分别创建猫、狗与鸟对象,注意指向的都是父类Animal变量animal1、animal2与animal3,传入学生对象的feed()方法,在feed()方法调用参数对象的move()与eat()方法时,程序在编译时自动识别具体的子类对象,从而选择性的调用对应的方法,这就是Java多态性的体现。由此可见,多态不仅解决了方法同名的问题,而且还使程序变得更加灵活,从而有效地提高程序的可扩展性和可维护性。
美中不足之处:运行结果当中没有显示出各种动物的玩法
修改Student类,直接添加一句animal.play(),但是要报错,怎么办呢?
此时,我们要利用对象的向下转型(downcasting)
再次运行测试学生类,查看结果
相关知识
11.学生喂养三种宠物:猫、狗和鸟
学生喂养三种宠物:猫、狗和鸟
学生喂养三种宠物:猫、狗、鸟
【Java项目三——任务3学生喂养宠物】
【学生喂养三种宠物:猫、狗和鸟】
喂养三种宠物:猫、狗和鸟
JAVA面向对象编程——学生喂养三种宠物:猫、狗和鸟
Java任务项目
java任务项目——学生喂养三种宠物:猫、狗、鸟
学生喂养三种宠物:猫、狗和鸟(上)
网址: 任务三、学生喂养三种宠物:猫、狗和鸟 https://m.mcbbbk.com/newsview158427.html
上一篇: jsp宠物乐园系统84lqi |
下一篇: (java)多态 |