文章目录
使用继承,体现多态性
任务:学生喂养三种宠物:猫、狗和鸟
- 首先学生要喂养动物,我们就先要创建,动物类(Animal),猫类(Cat),狗类(Dog),鸟类(Brid),学生类(Student)。
(一)编程实现
1、创建动物类(Animal)
- 首先我们要先创建类,在
net.jia.p03.t03
包里创建Animal
类
- 程序代码如下:
package net.jia.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 +
'}';
}
}
2、然后我们要继承动物类,创建猫类(Cat)
- 一样的先在
net.jia.p03.t03
包里创建Cat
类
package net.jia.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() + "]玩老鼠。");
}
}
3、我们就和上面一样,也是继承动物类,创建狗类(Dog)
- 先在
net.jia.p03.t03
包里创建Dog
类
package net.jia.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() + "]玩飞盘。");
}
}
4、继承动物类,创建鸟类(Brid)
- 先在
net.jia.p03.t03
包里创建Brid
类
package net.jia.p03.t03;
/**
* 功能: 狗类
* 作者:贾慧琳
* 日期:2022年05月12日
*/
public class Brid 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() + "]在玩羽毛球。");
}
}
5、然后再创建一个学生类(Student)
- 先在
net.jia.p03.t03
包里创建Student
类
package net.jia.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) {
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 Brid) {// 判断是否是鸟实例
System.out.println(name + "喂养鸟儿[" + animal.getName() + "]。");
} else {
System.out.println(name + "喂养动物[" + animal.getName() + "]。");
}
animal.speak(); // 子类继承父类的方法
animal.move(); // 体现多态(子类改写了父类的同名同参方法)
animal.eat();// 体现多态(子类改写了父类的同名同参方法)
// animal.play(); // 父类变量不能调用子类新增的方法
}
}
6、最后创建一个测试学生类
- 最后先在
net.jia.p03.t03
包里创建TestStudent
类
package net.jia.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(5);
// 创建第三个动物
Animal animal3 = new Brid();
animal3.setName("豆豆");
animal3.setAge(1);
// 调用学生对象的喂养方法,传入不同的动物对象
student.feed(animal1);
student.feed(animal2);
student.feed(animal3);
}
}
7、运行程序,查看结果
- 我们在运行结果的时候,并没有显示出各种动物类的玩法
- 接下来我们就修改
Student
类,利用对象的向下转型(downcasting)
- 再次运行程序测试学生类,查看结果