Java 多态

多态

操作符的多态

+ 可以作为算数运算,也可以作为字符串连接

同一个操作符在不同情景下,具备不同的作用

如果+号两侧都是整型,那么**+代表是数字相加**

如果+号两侧,任意一个是字符串,那么**+代表字符串连接**

这个很容易理解,就不写实例了

类的多态

父类引用指向子类对象

观察类的多态现象:

1.i1和i2都是Item类型

2.都调用effect方法

3.输出不同的结果

多态:都是同一个类型,调用同一个方法,却能呈现不同的状态


代码实例

package property;
 
public class Item {
    String name;
    int price;
 
    public void buy(){
        System.out.println("购买");
    }
    public void effect() {
        System.out.println("物品使用后,可以有效果 ");
    }
     
    public static void main(String[] args) {
        Item i1= new LifePotion();//对象转型,向上转型对象
        Item i2 = new MagicPotion();//对象转型,向上转型对象
        System.out.print("i1是Item类型,执行effect打印:");
        i1.effect();
        System.out.print("i2,也是Item类型,执行effect打印:");
        i2.effect();
    }
 
}



类的多态条件(☆)

要实现类的多态,需要如下条件

1.父类(接口)引用指向子类对象

2.调用的方法有重写

那么多态有什么作用呢?通过比较不使用多态使用多态来进一步了解


类的多态-不使用多态(★)

如果不使用多态,

假设英雄要使用血瓶和魔瓶,就需要为Hero设计两个方法

useLifePotion

useMagicPotion

除了血瓶和魔瓶还有很多种物品,那么就需要设计很多很多个方法,比如

​ usePurityPotion 净化药水

​ useGuard 真眼

​ useInvisiblePotion 使用隐形药水

等等等

package charactor;
 
import property.LifePotion;
import property.MagicPotion;
   
public class Hero {
    public String name;
    protected float hp;
 
    public void useLifePotion(LifePotion lp){
        lp.effect();
    }
    public void useMagicPotion(MagicPotion mp){
        mp.effect();
    }
 
    public static void main(String[] args) {
         
        Hero garen =  new Hero();
        garen.name = "盖伦";
     
        LifePotion lp =new LifePotion();//使用血瓶的效果
        MagicPotion mp =new MagicPotion();//使用蓝屏的效果
         
        garen.useLifePotion(lp);
        garen.useMagicPotion(mp);
         
    }
       
}

类的多态-使用多态

如果物品的种类特别多,那么就需要设计很多的方法

比如useArmor,useWeapon等等

这个时候采用多态来解决这个问题

设计一个方法叫做useItem,其参数类型是Item

​ 如果是使用血瓶,调用该方法

​ 如果是使用魔瓶,还是调用该方法

无论英雄要使用什么样的物品,只需要一个方法即可


代码实例

package charactor;
 
import property.Item;
import property.LifePotion;
import property.MagicPotion;
   
public class Hero {
    public String name;
    protected float hp;
 
    public void useItem(Item i){
        i.effect();
    }
 
    public static void main(String[] args) {
         
        Hero garen =  new Hero();
        garen.name = "盖伦";
     
        LifePotion lp =new LifePotion();
        MagicPotion mp =new MagicPotion();
         
        garen.useItem(lp);
        garen.useItem(mp);     
         
    }
       
}

练习-多态

immortal是不朽的,不死的意思

mortal就是终有一死的,凡人的意思

1.设计一个接口
接口叫做Mortal,其中有一个方法叫做die

2.实现接口

分别让ADHero,APHero,ADAPHero这三个类,实现Mortal接口,不同的类实现die方法的时候,都打印出不一样的字符串

3.为Hero类,添加一个方法,在这个方法中调用 m的die方法。

public void kill(Mortal m)

4.在主方法中

​ 首先实例化出一个Hero对象:盖伦

​ 然后实例化出3个对象,分别是ADHero,APHero,ADAPHero的 实例

​ 然后让盖伦Kill这3个对象

开发中在什么时候使用多态?

接口实现,抽象类,继承父类进行方法重写,同一个类中进行方法重载

继承父类进行方法重写


public class Parent{
 
    public void fun(){
    }
}
 
public class Child extends Parent{
    @Override
    public void fun(){
        //子类的重写
    }
}
Java多态指的是同一个方法名可以根据不同的对象调用出不同的行为。具体来说,多态是一种面向对象编程的特性,实现多态的方式主要有两种:方法重载和方法覆盖。方法重载指的是在一个类中定义多个同名方法,但这些方法有不同的参数列表,编译器会根据参数列表的不同选择合适的方法进行调用。方法覆盖指的是子类重写父类的方法,使得在使用父类对象调用该方法时,实际调用的是子类中的方法多态的好处在于,它可以提高代码的灵活性和可扩展性。通过多态,我们可以为不同的对象提供不同的行为,从而使得程序更加具有扩展性。此外,多态还可以让程序的调用更加简洁、清晰,提高了代码的可读性和可维护性。 下面是一个简单的Java多态的例子: ```Java class Animal { public void makeSound() { System.out.println("动物发出声音"); } } class Cat extends Animal { public void makeSound() { System.out.println("猫发出“喵喵”的声音"); } } class Dog extends Animal { public void makeSound() { System.out.println("狗发出“汪汪”的声音"); } } public class PolymorphismExample { public static void main(String[] args) { Animal animal1 = new Animal(); Animal animal2 = new Cat(); Animal animal3 = new Dog(); animal1.makeSound(); // 动物发出声音 animal2.makeSound(); // 猫发出“喵喵”的声音 animal3.makeSound(); // 狗发出“汪汪”的声音 } } ``` 在上面的例子中,Animal是一个父类,Cat和Dog是Animal的子类。Animal类中定义了一个makeSound()方法,Cat和Dog类分别重写了这个方法。在main()方法中,我们创建了三个Animal类型的对象,并分别调用它们的makeSound()方法。由于animal2和animal3都是Animal类型的对象,但实际上它们分别是Cat和Dog类型的对象,因此在调用它们的makeSound()方法时,实际上是调用了它们各自的实现,也就是Cat类和Dog类中重写的makeSound()方法。这就是Java多态的表现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值