JAVA子类作为实参父类作为形参_[java][23]多态--形式1 父类作为方法形参;形式2 父类作引用...

java小白的学习记录......

1. 多态形式1:父类做形参,子类做实参

多态形式2:父类做引用(类型),子类实例化

2. 多态实现的思路

step1-编写继承关系的父类/子类

step2-子类重写父类方法

step3-使用父类的引用指向子类的对象( 即 多态形式2 )

3. 实例:

step1-编写继承关系的父类/子类

1) 父类Pet,定义eat()方法

Pet.java:

public class Pet {

public void eat(){

System.out.println("Pet is eating.");

}

}

2) 子类Dog,Cat,Penguin均继承自Pet,并重写Pet的eat()方法

2.1) Dog.java:

public class Dog extends Pet {

//对应step2-子类重写父类方法

public void eat(){

System.out.println("Dog is eating meat.");

}

}

2.2) Cat.java:

public class Cat extends Pet{

public void eat(){

System.out.println("Cat is eating mice.");

}

}

2.3) Penguin.java:

public class Penguin extends Pet{

public void eat(){

System.out.println("Penguin is eating fish.");

}

}

3) 定义master类,feed()方法 表示feed的是Dog/Cat/Penguin

public class Master {

public void feed(Dog dog){

dog.eat();

}

public void feed(Cat cat){

cat.eat();

}

public void feed(Penguin penguin){

penguin.eat();

}

问题:master类中有多个feed()方法,feed()的参数都是Pet类的子类。如果频繁修改,代码可扩展性、可维护性差。

4)如何优化?使用多态

多态:同一个引用类型,使用不同的实例而执行不同的操作(父类引用指向子类对象)。

把master.java改为:

public class Master {

public void feed(Pet pet){

pet.eat();

}

}

5)Test.java进行测试

Test.java:

import java.util.*;

public class Test {

public static void main(String[] args){

//多态形式1:父类做形参,子类做实参

Dog dog=new Dog();

Penguin penguin=new Penguin();

Cat cat=new Cat();

Master ms=new Master();

ms.feed(dog);

ms.feed(penguin);

ms.feed(cat);

//结果

2559e6a95b482cf9f31802b52d4751ce.png

//多态形式2:父类做引用(类型),子类实例化

//对应step3-使用父类的引用指向子类的对象( 即 多态形式2 )

Pet pet1=new Dog();//类型的自动转换--向上 子类转父类

pet1.eat();

Pet pet=new Pet();

pet.eat();

//结果

a8f228d1335a78a22189cd6ef9d50794.png

}

}

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值