2019-1-21 笔记、作业
一、生活中的多态
1、生活多态:同一种事物,由于条件不同,产生的结果也不同
多态:同一个引用类型,使用不同的实例而执行不同操作
2、多态三要素:继承,方法重写,父类引用指向子类对象
PS:1、使用多态时,是使用父类的类型,但是对象是子类对象;
2、如果子类不重写父类方法,那么当使用多态时,是不能调用子类独有的方法;(即谁的类型调谁的方法)
3、当子类重写父类方法,看似调用的是父类中的方法,但实际使用是子类中重写过父类的方法
3、当父类引用指向子类对象/父类类型创建子类对象时,这个对象不能够使用子类独有的方法
当使用多态时,创建对象必须是-----父类类型 对象名 = NEW 子类构造方法;
4、实现多态的两种方式
A、使用父类作为方法参数
B、使用父类作为方法返回值
二、抽象(abstract)
抽象类:表示这个类的对象是不存在的,因此抽象类不能够被实例化对象,但是可以使用抽象类来创建对象,通常是创建子类对象,也就是多态;
因此不需要具体实现的方法,可以把这个方法定义为抽象方法
抽象类中可以有非抽象方法和抽象方法,但是抽象方法只能存在抽象类中
作业:用多态实现主人领养宠物并与宠物玩耍、以及宠物喂食
package java_2019_1_21;
/**
* 父类,宠物类
* @author Administrator
*/
public abstract class Pet {
private String name;
private int macy;
private int health;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getMacy() {
return macy;
}
public void setMacy(int macy) {
if(macy<0) {
System.out.println("亲密度为正整数,您输入有误,默认为60");
this.macy = macy;
}else {
this.macy = macy;
}
}
public int getHealth() {
return health;
}
public void setHealth(int health) {
if(health<0) {
System.out.println("健康值为正整数,您输入有误,默认为60");
this.health = health;
}else {
this.health = health;
}
}
//宠物玩耍
public abstract void play();
//宠物喂食
public abstract void eat();
}
package java_2019_1_21;
/**
* 狗狗类
* @author Administrator
*/
public class Dog extends Pet{
public Dog() {}
public Dog(String name,int macy,int health) {
super.setName(name);
super.setMacy(macy);
super.setHealth(health);
}
public void play() {
System.out.println("跟狗狗一起玩,狗狗会接飞盘!");
}
public void eat() {
System.out.println("正在给狗狗喂食...");
this.setHealth(this.getHealth()+3);
}
}
package java_2019_1_21;
/**
* 企鹅类
* @author Administrator
*/
public class Penguin extends Pet{
public Penguin() {}
public Penguin(String name,int macy,int health) {
super.setName(name);
super.setMacy(macy);
super.setHealth(health);
}
public void play() {
System.out.println("跟企鹅一起游戏!");
}
public void eat() {
System.out.println("正在给企鹅喂食...");
this.setHealth(this.getHealth()+5);
}
}
package java_2019_1_21;
/**
* 主人类
* @author Administrator
*/
public class Master {
//宠物玩耍
public static void play(Pet p) {
if(p instanceof Dog) {
Dog d = (Dog)p;
d.play();
}else if(p instanceof Penguin) {
Penguin pen = (Penguin)p;
pen.play();
}
}
//宠物喂食
public static void eat(Pet p) {
if(p.getHealth()<100) {
if(p instanceof Dog) {
if(p.getHealth()+3>100) {
System.out.println("现在狗狗的饱食度有"+p.getHealth()+",不需要喂食了!");
}else {
Dog d = (Dog)p;
d.eat();
}
}else if(p instanceof Penguin) {
if(p.getHealth()+5>100) {
System.out.println("现在企鹅的饱食度有"+p.getHealth()+",不需要喂食了!");
}else {
Penguin pen = (Penguin)p;
pen.eat();
}
}
}
}
}
package java_2019_1_21;
/**
* 测试类
* @author Administrator
*/
public class Test {
public static void main(String[] args) {
Pet p = new Dog("小白",55,98);
Pet p1 = new Penguin("小QQ",55,88);
System.out.println("******玩耍测试*****");
Master.play(p);
Master.play(p1);
System.out.println("******喂测试***");
Master.eat(p);
Master.eat(p1);
}
}
结果:

浙公网安备 33010602011771号