多态polymorphism
对于同一个指令(调用同一个名称的方法),不同的对象给予不同的反应(不同的方法实现)
规范:(多态实现的前提)
1 必须要有继承关系;
2 子类方法必须重写父类的方法;
3 父类引用指向子类对象
多态的目的:
为了提高代码的扩展性和逻辑性
为了方便代码逻辑的编写
多态的两种表现形式:
1 父类作为方法的形参
2 父类作为方法的返回值类型
引用类型的转换跟基本数据类型的转换类似:
当父类需要转成子类的时候,要进行强制转换,但是在强制转换之前,一定要先判断父类引用指向的子类对象到底是谁,
如果无法确定,在运行过程中可能出错
===使用instanceof运算符来判断,
对象 instanceof 类或接口
当子类需要向父类转换的时候,直接自动转换,不需要做任何判断
package com.yuzhu;
public abstract class Pet {
public abstract void feed();
public void play()
{
System.out.println("playing");
}
}
package com.yuzhu;
public class Cat extends Pet {
@Override
public void feed() {
System.out.println("猫吃鱼");
}
}
package com.yuzhu;
public class Dog extends Pet {
@Override
public void feed() {
System.out.println("狗吃骨头");
}
}
package com.yuzhu;
public class Penguin extends Pet {
@Override
public void feed() {
System.out.println("chi sha ya ");
}
}
package com.yuzhu;
public class People {
/* public void feed(){
new Dog().feed();
new Cat().feed();
}*/
public void feed(Pet pet){
pet.feed();
}
public void play(Pet pet){
pet.play();
}
public Pet buy(int type){
if(type == 1){
return new Dog();
}else if(type == 2) {
return new Cat();
}else{
return new Penguin();
}
}
public static void main(String[] args) {
People people = new People();
Pet cat = new Cat(); // 父类引用指向子类对象
Pet dog = new Dog();
Pet penguin = new Penguin();
people.feed(cat );
people.feed(dog );
people.feed(penguin );
people.play(cat );
people.play(dog );
Pet pet = people.buy(1);
if(pet instanceof Dog){
System.out.println("buy a dog");
}else if(pet instanceof Cat){
System.out.println("buy a cat");
}else{
System.out.println("buy a penguin");
}
}
}
版权声明:本文为mick_hu原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。