多态及实现方式(看完就会)

多态是什么?

多态是指同一个方法调用可以在不同的对象上产生不同的行为。在多态的情况下,同一个方法可以被不同的对象调用,并且会根据对象的实际类型来执行不同的行为方法体。多态可以通过继承和接口实现。
 

先了解一下引用类型。

引用类型:是存储的是对象在内存中的地址 包括类、接口和数组等。创建这些类型的对象时,通常使用 new 关键字。

class Animal {
    void sound() {
        System.out.println("Animal sound");
    }
}

class Dog extends Animal {
    void sound() {
        System.out.println("Bark");
    }
}

public class Main {
public static void main(String[] args) {
        Animal myDog = new Dog(); // 向上转型
        myDog.sound(); // 输出 "Bark"
    }
}

上面的例子就是使用了多态

myDog是一个Animal引用类型变量,指向Dog类

Animal myDog = new Dog(); 这条语句创建了两个对象:

  1. Dog 对象:使用 new Dog() 创建了一个 Dog 类的实例。

  2. myDog 引用myDog 是一个 Animal 类型的引用,指向刚刚创建的 Dog 对象。

多态的实现形式就是

父类引用指向子类引用的实例

引用类型变量存储的是对象在内存中的地址。引用类型变量可以指向其子类对象,允许调用子类重写的方法。

向上转型(Upcasting)

向上转型是将子类的引用赋值给父类的引用类型变量。这种转换是隐式的,不需要显式的类型转换操作符。

 

Animal myDog = new Dog();

这条语句创建了两个对象:

  1. Dog 对象:使用 new Dog() 创建了一个 Dog 类的实例。
  2. myDog 引用myDog 是一个 Animal 类型的引用,指向刚刚创建的 Dog 对象。

尽管 myDog 是 Animal 类型,但它调用的是 Dog 类中重写的 sound 方法。

向下转型(Downcasting)

如果需要调用子类特有的方法,可以进行向下转型,将父类的引用转换为子类的引用。这种转换是显式的,需要类型转换操作符。

 

Dog myRealDog = (Dog) myDog; // 向下转型
myRealDog.sound(); // 现在可以调用子类的方法

在向下转型时,如果引用的对象不是实际的子类对象,会抛出 ClassCastException。因此,通常在向下转型前,会使用 instanceof 操作符进行检查。

 

if (myDog instanceof Dog) {
    Dog myRealDog = (Dog) myDog;
    myRealDog.sound();
}

多态的实现方式 

1.多态是同一个行为具有多个不同表现形式或形态的能力。---重写   重写与重载(看完就懂)-CSDN博客

2.多态就是同一个接口,使用不同的实例而执行不同操作。----接口

多态在接口中的应用是面向对象编程中的一个重要特性,允许不同类通过实现同一个接口来实现不同的行为。 --就是用接口指向实现类的对象

相当于接口是父类,实现类是子类

interface Animal {
    void sound();
}

class Dog implements Animal {
    public void sound() {
        System.out.println("Bark");
    }
}

class Cat implements Animal {
    public void sound() {
        System.out.println("Meow");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal myDog = new Dog(); // 向上转型
        Animal myCat = new Cat(); // 向上转型

        myDog.sound(); // 输出 "Bark"
        myCat.sound(); // 输出 "Meow"
    }
}

Dog 和 Cat 类都通过多态实现了 Animal 接口,并提供了各自的 sound 方法。通过向上转型,我们可以使用 Animal 类型的引用来调用不同实现类的方法

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值