JAVA面向对象6:多态

1、多态概述

在设计一个方法时,通常希望该方法具备一定的通用性。例如要实现一个动物叫的方法,由于每种动物的叫声是不同的,因此可以在方法中接受一个动物类型的参数,当传入猫类对象时就发出猫类的叫声,传入犬类对象时就发出犬类的叫声。在同一个方法中,这种由于参数类型不同而导致执行效果各异的现象就是多态。

在Java中为了实现多态,允许使用一个父类类型的变量来引用一个子类类型对象,根据被引用子类对象特征的不同,得到不同的运行结果。
案例1:

//定义接口Animal
interface Animal {
   
    void shout()                //定义抽象shout()方法
}
//定义Cat类实现Animal接口
class Cat implements Animal {
   
    //实现shout()方法
    public void shout() {
        System.out.println("喵喵……");
    }
}
//定义Dog类实现Animal接口
class Dog implements Animal {
   
    //实现shout()方法
    public void shout() {
        System.out.println("汪汪……");
    }
}
//定义测试类
public class Example1 {
   
    public static void main(String[] args) {
        Animal an1=new Cat();   //创建Cat对象,使用Animal类型的变量an1引用
        Animal an2=new Dog();   //创建Dog对象,使用Animal类型的变量an2引用
        animalShout(an1);       //调用animalShout()方法,将an1作为参数传入
        animalShout(an2);       //调用animalShout()方法,将an2作为参数传入
    }
    //定义静态的animalShout()方法,接受一个Animal类型的参数
    public static void animalShout(Animal an) {
        an.shout();             //调用实际参数的shout()方法
    }
}

在案例1中,第22、23行代码实现了父类类型变量引用不同的子类对象,当第24、25行代码调用animalShout()方法时,将父类引用的两个不同子类对象分别传入,结果打印出了“喵喵”和“汪汪”。由此可见,多态不仅解决了方法同名的问题,而且还使程序变得更加灵活,从而有效地提高程序的可扩展性和可维护性。


2、对象的类型转换

在多态的学习中,涉及到将子类对象当做父类类型使用的情况,例如:

Animal an1=new Cat();   //创建Cat对象,使用Animal类型的变量an1引用
Animal an2=new Dog();   //创建Dog对象,使用Animal类型的变量an2引用

将子类对象当做父类使用时不需要任何显示的声明,需要注意的是,此时不能通过父类变量去调用子类中的某些方法。
案例2:

//定义Animal接口
interface Animal {
   
    void shout()                    //定义抽象shout()方法
}
//定义Cat类实现Animal接口
class Cat implements Animal {
   
    //实现shout()方法
    public void shout() {
        System.out.println("喵喵……");
    }
    //定义sleep()方
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值