2019.1.21 任务
作业链接:https://pan.baidu.com/s/1_Z9nWwKi_Y2iHHXMqRvqBw
提取码:0bch
一、笔记
多态是同一个引用类型使用不同的实例,执行不同的操作
实现多态的三要素:继承 方法重写 父类引用指向子类对象
使用多态时:是使用父类的类型,但是对象是子类的对象
如果子类不重写父类的方法,那么当使用多态时,是不能调用子类独有的方法
(谁的类型,调用谁的方法)
但是当子类重写父类的方法,使用多态调用的方法,看似是父类中的方法,但实际上是子类中重写过父类的哪个方法
当父类引用指向子类对象/父类类型创建子类对象时,这个对象不能够使用子类独有的方法
当使用多态时:创建对象必须是------父类类型 对象名 = new 子类构造方法
关键字:abstract 抽象
抽象类:表示这个类的对象是不存在的,因此抽象类不能够被实例化对象
但是可以用它的类型来创建对象,通常是创建子类的对象,也就是多态
(抽象方法没有方法体)
抽象类中可以有非抽象方法和抽象方法,但是抽象方法只能存在于抽象类中
实现多态的两种方式:使用父类作为方法参数,使用父类作为方法返回值
向上转型等同于自动类型转换,向下转型等同于强制类型转换
二、作业
package com.homework; public abstract class Pet { private String name; private int health; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getHealth() { return health; } public void setHealth(int health) { if(health < 0 || health > 100){ health = 60; } this.health = health; } public void print() { System.out.println("健康值是"+getHealth()); } public abstract void eatting(); }
package com.homework; public class Dog extends Pet{ public void eatting() { if(this.getHealth()<100) { System.out.println("给狗狗吃狗粮"); this.setHealth(this.getHealth()+3); } else { System.out.println("狗狗不需要喂食!"); } } }
package com.homework; public class Penguin extends Pet{ public void eatting() { if(this.getHealth()<100) { System.out.println("给企鹅吃鱼"); this.setHealth(this.getHealth()+5); } else { System.out.println("企鹅不需要喂食!"); } } }
package com.homework; import java.util.Scanner; public class Test { public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc=new Scanner(System.in); Pet pet =new Dog(); System.out.print("请输入狗狗的健康值(0-100):"); pet.setHealth(sc.nextInt()); pet.eatting(); pet.print(); pet =new Penguin(); System.out.print("请输入企鹅的健康值(0-100):"); pet.setHealth(sc.nextInt()); pet.eatting(); pet.print(); } }
package homework1; public abstract class Pet { private String name; private int health; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getHealth() { return health; } public void setHealth(int health) { if(health < 0 || health > 100){ health = 60; } this.health = health; } public void print() { System.out.println("健康值是"+getHealth()); } }
package homework1; public class Dog extends Pet{ public void pickFlyDisc() { if(this.getHealth()>0) { System.out.println("狗狗吧扔出去的飞盘接回来"); this.setHealth(this.getHealth()-1); }else { System.out.println("健康值不够!狗狗接不动了!"); } } }
package homework1; public class Penguin extends Pet{ public void swimming() { if(this.getHealth()>0) { System.out.println("企鹅开始游泳"); this.setHealth(this.getHealth()-1); }else { System.out.println("健康值不够!企鹅游不动了!"); } } }
package homework1; import java.util.Scanner; public class Test { public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc=new Scanner(System.in); Pet pet = new Dog(); System.out.print("请输入狗狗的健康值(0-100):"); pet.setHealth(sc.nextInt()); if(pet instanceof Dog) { Dog dog=(Dog)pet; dog.pickFlyDisc(); dog.print(); }else if(pet instanceof Penguin) { Penguin penguin=(Penguin)pet; penguin.swimming(); penguin.print(); } } }