文章目录
任务一、学生喂养三种宠物:猫、狗和鸟
- 动物类(Animal):属性(name、age),方法(speak、move、eat)
- 猫类(cat)继承动物类,添加新方法(play)
- 狗类(dog)继承动物类,添加新方法(play)
- 鸟类(bird)继承动物类,添加新方法(play)
- 学生类(student):属性(name),方法(feed(animal))
(一)编程实现
一、创建动物类
package next.L;
import org.junit.runner.Computer;
/**
* 功能:动物类
* 作者:
* 日期:
*/
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 +
'}';
}
}
二、继承动物类,创建猫类
package next.L;
/**
* 功能:猫类
* 作者:
* 日期:
*/
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() + "]在玩老鼠");
}
}
三、继承动物类,创建狗类
package next.L;
/**
* 功能:狗类
* 作者:
* 日期:
*/
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() + "]在玩人");
}
}
四、继承动物类,创建鸟类
package next.L;
/**
* 功能:鸟类
* 作者:
* 日期:
*/
public class bird 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() + "]在玩树木");
}
}
五、创建学生类
package next.L;
/**
* 功能:学生类
* 作者:
* 日期:
*/
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 bird) { //判断是否是鸟实例
System.out.println(name + "喂养鸟儿[" + animal.getName() + "]。");
}else {
System.out.println(name + "喂养动物[" + animal.getName() + "]。");
}
animal.move(); //体现多态
animal.eat(); //体现多态
}
}
六、测试学生类
package next.L;
/**
* 功能:测试学生类
* 作者:
* 日期:
*/
public class TestStudent {
public static void main(String[] args) {
//创建学生类
student student = new student();
student.setName("张傻");
//创建第一个动物
Animal animal1 = new Cat();
animal1.setName("小黄");
animal1.setAge(6);
//创建第一个动物
Animal animal2 = new dog();
animal2.setName("旺财");
animal2.setAge(4);
//创建第一个动物
Animal animal3 = new bird();
animal3.setName("小飞");
animal3.setAge(2);
//调用学生对象喂养方法,传入不同的动物对象
student.feed(animal1);
student.feed(animal2);
student.feed(animal3);
}
}
七、运行程序,查看结果
(二)知识点讲解
- 定义: 在Java中,多态是指不同类的对象在调用同一个方法时所呈现出的多种不同行为。
- 说明: 通常来说,在一个类中定义的属性和方法被其他类继承或重写后,当把子类对象直接赋值给父类引用变量时,相同引用类型的变量调用同一个方法所呈现出的多种不同形态。
- 作用: 通过多态,消除了类之间的耦合关系,大大提高了程序的可扩展性和可维护性。
- 注意: Java的多态性是由类的继承、方法重写以及父类引用指向子类对象体现的。由于一个父类可以有多个子类,多个子类都可以重写父类方法,并且多个不同的子类对象也可以指向同一个父类。这样,程序只有在运行时程序才能知道具体代表的是哪个子类对象,这就体现了多态性。