面向对象(十一)多态概述与对象类型的转换

多态概述

多态性是面向对象思想中的一个非常重要的概念,在Java中,多态是指不同对象在调用同一个方法时表现出的多种不同行为。例如,要实现一个动物叫的方法,由于每种动物的叫声是不同的,因此可以在方法中接收一个动物类型的参数,当传入猫类对象时就发出猫类的叫声,传入犬类对象时就发出犬类的叫声。在同一个方法中,这种由于参数类型不同而导致执行效果不同的现象就是多态。

形式

Java中多态主要有以下两种形式:

(1)方法的重载。

(2)对象的多态性(方法重写)

案例

定义抽象类

abstract class Animal {
    abstract void shout();
}

定义Cat类继承Animal抽象类 

public class Cat extends Animal {
    public void shout(){
        System.out.println("喵喵...");
    }

}

 定义Dog类继承Animal抽象类 

public class Dog extends Animal {
    public void shout(){
        System.out.println("汪汪汪....");
    }
}

 定义测试类


public class Example14 {
    public static void main(String[] args) {
        Cat an1 =new Cat();
        Dog an2 =new Dog();
        an1.shout();
        an2.shout();
    }
}

对象类型的转换

对象类型转换主要分为以下两种情况:

(1)向上转型:子类对象→父类对象。

(2)向下转型:父类对象→子类对象。

对于向上转型,程序会自动完成,而向下转型时,必须指明要转型的子类类型

转换格式

对象向上转型:父类类型 父类对象 = 子类实例;

对象向下转型:

父类类型 父类对象 = 子类实例;

子类类型 子类对象 = (子类)父类对象;

案例

向上转型案例

//定义类
public class Animal {
    public void shout(){
        System.out.println("喵喵喵");
    }
}
public class Dog extends Animal{
    public void shout(){
        System.out.println("汪汪汪");
    }
    public void eat(){
        System.out.println("吃骨头");
    }
}
public class Example15 {
    public static void main(String[] args) {
        Dog dog=new Dog();//创建Dog对象
        Animal an= dog;
                an.shout();
    }
}

向下转型案例

public class Animal {
    public void shout(){
        System.out.println("喵喵喵");
    }
}
public class Dog extends Animal{
    public void shout(){
        System.out.println("汪汪汪");
    }
    public void eat(){
        System.out.println("吃骨头");
    }
}

public class Example16 {
    public static void main(String[] args) {
        Animal an =new Dog();//发生了向上转型
        Dog dog =(Dog) an;//发生了向下转型
        dog.shout();
        dog.eat();
    }
}

在向下转型时,不能直接将父类实例强制转换为子类实例,否则程序会报错。

错误案例

Dog dog = (Dog)new Animal();  (//编译错误)

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浩气长存在心中

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值