多态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 版权协议,转载请附上原文出处链接和本声明。