作业一:使用多态实现主人领养宠物,和宠物玩的功能,
父类,宠物类:
package com.polym02; /** * 父类 ,宠物类 */ public abstract class Pet { //宠物被领养的方法 public Pet yang(Pet pet){ return pet; } }
子类狗:
package com.polym02; /** * 狗狗类 */ public class Dog extends Pet { //玩的方法 public void wang() { System.out.println("陪狗狗去接飞盘"); } //重写父类被领养的方法 public Pet yang(Pet pet){ System.out.println("给你一只狗狗"); return pet; } }
子类企鹅:
package com.polym02; /** * 企鹅类 */ public class Penguin extends Pet { //玩的方法 public void wang(){ System.out.println("带企鹅去游泳。。。。。。"); } //重写父类被领养的方法 public Pet yang(Pet pet){ System.out.println("给你一只企鹅。。。。。"); return pet; } }
主人类:
package com.polym02; /** * 主人类 */ public class Master {//带宠物出去玩的方法 public void quWang(Pet pet){ if(pet instanceof Dog){ Dog dog = (Dog)pet dog.wang(); }else if (pet instanceof Penguin){ Penguin pen =(Penguin)pet pen.wang(); } } //领养宠物的方法 public Pet lingYang(Pet pet) { Pet p = null; if (pet instanceof Dog) { pet.yang(p1); p = pet; }else if(pet instanceof Penguin){ pet.yang(p2); p =pet; } return p; } }
测试类:
package com.polym02; import java.util.Scanner; public class Test { public static void main(String[] args){ Scanner sc = new Scanner(System.in); Master m = new Master(); Pet P1 = new Dog(); Pet P2 = new Penguin(); System.out.println("请输入要陪玩的宠物:1,狗狗 2,企鹅"); int choose = sc.nextInt(); if (choose==1){ m.quWang(P1); }else{ m.quWang(P2); } System.out.println("请输入你需要的宠物:1,狗狗 2,企鹅"); int choose02 = sc.nextInt(); if (choose02==1){ m.lingYang(P1); }else{ m.lingYang(P2); } } }
输出结果图:
作业二2:
使用多态实现为宠物喂食:
父类宠物类:
/** * 宠物健康值 */ private int intimacy=46; /** * 宠物亲密度 */ private int health=0; public int getHealth() { return health; } public void setHealth(int health) { this.health = health; } public int getIntimacy() { return intimacy; } public void setIntimacy(int intimacy) { this.intimacy = intimacy; } /** * 宠物吃食的方法 */ public abstract void eat(); }
子类狗:
package com.Polym; public class Dog extends Pet { public void eat(){ if(getIntimacy()<50){ System.out.println("给狗狗吃狗粮和肉骨头"); setIntimacy(getIntimacy()+20); System.out.println("狗狗现在的健康值是:"+getIntimacy()); setHealth(getHealth()+10); System.out.println("狗狗现在和你的亲密度是:"+getHealth()); } } }
子类猫咪:
package com.Polym; public class Cat extends Pet { public void eat(){ if(getIntimacy()<50){ System.out.println("给猫咪吃猫粮和小鱼仔。。。。"); setIntimacy(getIntimacy()+30); System.out.println("猫咪现在的健康值是:"+getIntimacy()); setHealth(getHealth()+10); System.out.println("猫咪现在和你的亲密度是:"+getHealth()); } } }
主人类:
package com.Polym;public class Master { public void feed(Pet pet){ if(pet instanceof Dog){ pet.eat(); }else if(pet instanceof Cat){ pet.eat(); } }}
测试类:
public class Test { public static void main(String[] args){ Master m1 = new Master(); Dog P1 = new Dog(); Cat P2 = new Cat(); System.out.println("狗狗现在的健康值是:"+P1.getIntimacy()); System.out.println("狗狗现在和你的亲密度是:"+P1.getHealth()); m1.feed(P1); System.out.println("猫咪现在的健康值是:"+P2.getIntimacy()); System.out.println("猫咪现在和你的亲密度是:"+P2.getHealth()); m1.feed(P2); } }
输出结果图:
课堂笔记:
多态:
同一个引用类型,使用不同的实参执行不同操作
同一个类型使用不同的对象执行的结果有多种就是多态
一般就两种一种是父类作为参数,一种是父类作为反回值
继承,方法重写,父类引用指向子类对象,是实现多态的基础
1.使用多态时,是使用父类类型,但是对象还是子类对象
2.如果子类不重写父类方法,那么当使用多态时,是不能调用子类独有的方法
3.当子类重写父类方法,使用多态调用的方法,看似时父类的方法但实际调用的时子类中重写父类的那个方法,
一个方法没方法体就叫抽象方法
当一个类中有抽象方法的时候这个类就是抽象类,抽象类不一定有抽象方法,
抽象类不能被实列化,实列化没意义
抽象类的子类可以是普通类,该普通方法必须实现抽象类中抽象方法
抽象类的子类是抽象类时,此时可以不实现抽象类中抽象方法
抽象方法必须加关键词abstract
例: public abstract void a();
向上转型:
子类转化父类
父类型 引用变量名 = new 子类型(); 自动转化类型
此时通过父类引用变量调用的方法是子类覆盖或继承父类的方法,不是父类本身的方法
此时通过父类引用变量无法调用子类特有的方法
向下转型:
父类转化子类
子类型 引用变量名 = (子类型)父类的引用变量; 需要强制类型转
实列方法:动态绑定机制 调用属性和方法是子类中的
静态方法:静态绑定机制 调用属性和方法是父类中的
代码下载链接:https://pan.baidu.com/s/1JBE5GSu7-Fd_i8pnGsYTng
提取码:ghzq
来源:https://www.cnblogs.com/cxlbzdcom/p/10300851.html