4.4多态

本文探讨了Java中的多态性,主要表现为方法的重载,通过父类类型的变量引用子类对象实现。内容包括如何进行对象类型转换,如将子类对象作为父类类型使用,以及强制类型转换的实践,例如从animal类型转换为Cat类型以调用特定子类的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

多态:就是方法的重载,由于参数类型的不同而导致执行方法不同的现象
允许使用一个父类类型的变量来引用一个子类类型的对象,根据被引用子类对象特征的不同,得到不同的运行结果

// 定义接口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 Example13 {
    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()方法
    }
}

4.4.2对象的类型转换
将子类对象当做父类的类型使用
animal an1 = new Cat( );//将子类对象Cat当做父类animal的类型来使用
animal an1 = new Dog( );
此时不能通过父类变量来调用子类中的某些方法

// 定义Animal接口
interface Animal {    
    void shout(); // 定义抽象方法shout()
}
// 定义Cat类实现Animal接口
class Cat implements Animal {   
     // 实现抽象方法shout()
    public void shout() {             
        System.out.println("喵喵……");
    }
     // 定义sleep()方法
    void sleep() {
        System.out.println("猫睡觉……");
    }
}
// 定义测试类 
public class Example14 {
    public static void main(String[] args) {
         Cat cat = new Cat(); // 创建Cat类的实例对象
        animalShout(cat);    // 调用animalShout()方法,将cat作为参数传入
    }
     // 定义静态方法animalShout(),接收一个Animal类型的参数
    public static void animalShout(Animal animal) {
        animal.shout();  // 调用传入参数animal的shout()方法
        animal.sleep();  // 调用传入参数animal的sleep()方法
    }
}

可以将animal类型直接转换成shout类型
强制转换:
Cat cat = (Cat) animal;
然后进行直接调用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值