关于java多态的解释学习
来源:互联网 发布:windows 无线触摸板 编辑:程序博客网 时间:2024/06/08 16:53
关于java多态的的理解主要用两句话:
- 子承父业 指 ----->继承父亲的称呼,手艺,特征
- 打着父亲的名称干自己的事 指 -----> 伪装成父亲干活
接下来说明: 封装 继承 多态
代码理解:
父类Pet
public abstract class Pet {private String name = "无名氏";// 昵称private int health = 100;// 健康值private int love = 0;// 亲密度/** * 抽象方法eat(),负责宠物吃饭功能。 */public abstract void eat();/** * 有参构造方法。 * @param name 昵称 */public Pet(){}public Pet(String name) {this.name = name;}public void setName(String name) {this.name = name;}public void setHealth(int health) {if(health>0&&health<100 ){this.health = health;}}public void setLove(int love) {this.love = love;}public String getName() {return name;}public int getHealth() {return health;}public int getLove() {return love;}/** * 输出宠物信息。 */public void print() {System.out.println("宠物的自白:\n我的名字叫" + this.name + ",健康值是"+ this.health + ",和主人的亲密度是"+ this.love + "。");}}
子类猫public class Cat extends Pet{ private String CatStrain;// 品种 public Cat(String name, String CatStrain) { super(name); this.CatStrain = CatStrain; } @Override public void eat() { if(getHealth()>=100){ System.out.println("猫猫"+this.getName() +"吃饱了,不需要喂食了!"); }else{ this.setHealth(this.getHealth()+4); System.out.println("猫猫"+this.getName() + "吃饱啦!健康值增加3。"); } }}子类狗
/** * 狗狗类,宠物的子类。 */public class Dog extends Pet {private String strain;// 品种/** * 有参构造方法。 * @param name 昵称 * @param strain 品种 */public Dog(String name, String strain) {super(name); this.strain = strain;}public String getStrain() {return strain;}/** * 重写父类的print方法。 */public void print(){super.print(); //调用父类的print方法System.out.println("我是一只 " + this.strain + "。");}/** * 实现吃食方法。 */public void eat() {if(getHealth()>=100){System.out.println("狗狗"+this.getName() +"吃饱了,不需要喂食了!");}else{this.setHealth(this.getHealth()+3);System.out.println("狗狗"+this.getName() + "吃饱啦!健康值增加3。");}}public void catchingFlyDisc() {System.out.println("主人和狗狗"+this.getName()+"玩接飞盘游戏,狗狗健康值减少10,与主人亲密度增加5");}}
企鹅类
/** * 企鹅类,宠物的子类。 */public class Penguin extends Pet {private String sex;// 性别/** * 有参构造方法。 * @param name 昵称 * @param sex 性别 */public Penguin(String name, String sex) {super(name);this.sex = sex;}public String getSex() {return sex;}/** * 重写父类的print方法。 */public void print() {super.print();System.out.println("性别是 " + this.sex + "。");}/** * 实现吃食方法。 */public void eat() {if(getHealth()>=100){System.out.println("企鹅"+this.getName() +"吃饱了,不需要喂食了!");}else{this.setHealth(this.getHealth()+5);System.out.println("企鹅"+this.getName() + "吃饱啦!健康值增加3。");}}public void swimming() {System.out.println("主任和企鹅"+this.getName()+"玩游泳,企鹅健康值减少10,与主人亲密度增加5");}}
主人类
** * 主人类。 */public class Master {private String name = "";// 主人名字private int money = 0; // 元宝数/** * 有参构造方法。 * @param name 主人名字 * @param money 元宝数 */public Master(String name, int money) {this.name = name;this.money = money;}public void setName(String name) {this.name = name;}public void setMoney(int money) {this.money = money;}public int getMoney() {return money;}public String getName() {return name;}/** * 主人给D喂食。 */// 此时主人开始喂食 maser.feed() 传过来Dog的类型// 因为Pet 是父类所以自动的对象类型转换为Pet//此时传过来的Gog所然已经转变成Pet类型但是依然是狗的本质不变只是多了一个称呼。路径不变//当pet.eat()时pet会去调用父类的eat();//因为子类Dog继承了Pet切重写了eat()方法,所以此时会调用Dog类的eat()方法public void feed(Pet pet) {pet.eat();}//领养宠物public Pet getPet(String type){ //new 不同的宠物Pet p1=null;if (type.equals("1")) {p1=new Dog("旺旺","串串");}if (type.equals("2")) { p1=new Penguin("黑白","Q仔");}return p1;} //public void play(Pet pet){if (pet instanceof Dog){Dog dog=(Dog) pet; dog.catchingFlyDisc();}else if (pet instanceof Penguin){Penguin pgn=(Penguin) pet;pgn.swimming();}开始实现测试结果
/** * 测试类,领养宠物并喂食。 */public class Test {public static void main(String[] args) {//狗企鹅此时为子类 要通过多态的方式来喂养//Pet 为父类 里面有一个抽象的feed方法Dog dog = new Dog("欧欧", "雪娜瑞");dog.setHealth(80); //设置健康值,以便正常喂食Penguin pgn = new Penguin("楠楠", "Q妹");Master master=new Master("王先生",100); // master.feed(dog); //主人给狗狗喂食master.feed(pgn); //主人给企鹅喂食pgn.setHealth(80); //设置健康值,以便正常喂食master.feed(pgn); //主人再次给企鹅喂食 /*Master master=new Master("王先生",100);Pet p= master.getPet("1");p.eat();//做玩游戏的测试Dog dog = new Dog("欧欧", "雪娜瑞");master.play(dog);*/}}
0 0
- 关于java多态的解释学习
- 关于JPA的一点学习与解释
- 关于java设计模式的另类解释
- 关于Java中类赋值的解释
- 关于java中main函数的解释
- 关于Java的源程序、编译、解释、执行
- java中关于方法的解释
- 关于java.lang.invoke包的解释
- 【转载】关于Java堆和栈的解释,收藏下来以后学习
- Java学习笔记(二十一):关于Integer.getInteger(String str)的解释
- java关于SSH解释
- java多态解释
- Java学习之道:关于VO、PO的理解-java的(PO,VO,TO,BO,DAO,POJO)解释
- Java学习:EJB的专用术语解释
- 关于虚函数和多态(很好的解释)
- 学习openCV_1:关于通道和灰度的解释
- 关于如何解释机器学习的一些方法
- 关于如何解释机器学习的一些方法
- Interface和abstract类的区别
- spring boot实现文件上传下载以及多文件上传
- 自定义adapter notifyDataSetChanged失效的解决
- Android6.0 有关权限的研究(第二版)
- 面经
- 关于java多态的解释学习
- Angular入门级教程三 Angular 中的控制器(controller)
- 洛谷 1417——烹调方案【动规】
- ehcache memcache redis 比较
- linux安装chrome,chrome安装flash player,firefox安装flash player
- android自定义属性
- 组件化入门
- Gym 101097G Party
- swap分区脚本