Pet.java
public abstract class Pet {
//吃东西
public abstract void feed();
}
Dog.java
public class Dog extends Pet{
@Override
public void feed() {
System.out.println("狗在吃骨头.....");
}
public void test(){
System.out.println("test.... ...");
}
}
Penguin.java
public class Penguin extends Pet{
@Override
public void feed() {
System.out.println("企鹅正在吃鱼....");
}
}
Cat.java
public class Cat extends Pet {
@Override
public void feed() {
System.out.println("猫正在吃鱼......");
}
}
主人类:Person.java
/*
多态:
* 对应同一个指令(调用同一个名称的方法),不同的对象给予不同的反应(不同的方法实现)
* 规范(多态实现的前提):
* 1、必须要有继承关系
* 2、子类方法必须重写父类的方法
* 3、父类引用指向子类对象(子类实例)
* 多态的目的:
* 1、为了提高代码的扩展性和维护性
* 2、方便代码逻辑的编写
* 多态的两种表现形式:
* 1、父类作为方法的参数
* 2、父类作为方法的返回值类型
*
* 引用类型的转换跟基本数据类型的转换类似:
* 1、当父类需要转成子类的时候,要进行强制转换,但是在强制转换之前一定要先判断父类引用指向的子类对象到底是谁,
* 如果无法确定,在运行过程中可能出错
* 2、当子类需要向父类转换的时候,直接自动转换,不需要进行任何的判断。
*
*/
public class Person {
// public void feed(Dog dog){
// dog.feed();
// }
// public void feed(Penguin p ){
// p.feed();
// }
public void feed(Pet pet){
pet.feed();
}
public Pet getPet(String typeId){
if(typeId.equals("0")){
return new Dog();
}else if(typeId.equals("1")){
return new Penguin();
}else{
return new Cat();
}
}
public static void main(String[] args) {
Person person = new Person();
Pet dog = new Dog();
person.feed(dog);
// dog.test();(错误,不能调)
Pet penguin =new Penguin();
person.feed(penguin);
Cat cat =new Cat();
cat.feed();
Pet pet = person.getPet("1");
if(pet instanceof Dog){
System.out.println("领养的是狗");
}else if(pet instanceof Penguin){
System.out.println("领养的是企鹅");
}else if(pet instanceof Cat){
System.out.println("领养的是猫");
}
}
}