首页 > 编程语言 >Java基础:多态

Java基础:多态

时间:2024-10-28 12:49:38浏览次数:8  
标签:类型转换 Java Tortoise 对象 子类 基础 多态

目录

一、认识多态

1、什么是多态?

2、多态的具体代码体现

3、多态的前提

4、多态的一个注意事项

二、多态的好处

1、使用多态的好处

2、多态下产生的一个问题

三、多态下的类型转换

1、类型转换有几种形式?能解决什么问题?

2、强制类型转换需要注意什么?

3、强制类型转换前,Java建议我们做什么事情?


一、认识多态

1、什么是多态?

多态是在继承/实现情况下的一种现象,表现为:对象多态、行为多态。

2、多态的具体代码体现

下图中,学生和老师都属于人类,这就是对象多态;学生对象和老师对象调用run方法,会产生不同的效果,这就叫行为多态。

3、多态的前提

  • 有继承/实现关系

  • 存在父类引用子类对象(即:用父类变量,接收子类对象)

        下图中,父类是Animal类(动物类),子类是Wolf类(狼类)、Tortoise类(乌龟类)。

  • 存在方法重写

4、多态的一个注意事项

多态是对象、行为的多态,而Java中的属性(成员变量)不谈多态。

举例:

二、多态的好处

1、使用多态的好处

  • 好处一:在多态形式下,左边变量和右边对象是解耦合的,更便于扩展和维护。

        解耦合:可随时更换、可替代的。比如:玩具车的电池没电了,可以随时换一块新的电池,此时就说电池和玩具车是解耦合的。

        

        上图中,就可以说,左边的动物类Animal和右边的乌龟类、狼类....是解耦合的。

  • 好处二:定义方法时,使用父类类型的形参,可以接收一切子类对象,扩展性更强、更便利。

        举例:

        

        

2、多态下产生的一个问题

  • 多态下,不能使用子类的独有功能

三、多态下的类型转换

1、类型转换有几种形式?能解决什么问题?

  • 自动类型转换、强制类型转换

  • 可以把对象转换成真正的类型,从而解决了多态下不能调用子类独有方法的问题

2、强制类型转换需要注意什么?

存在继承/实现时,就可以进行强制类型转换,编译阶段不会报错。

但是,运行时,如果发现对象的真实类型与强转后的类型不同,就会报错。

举例:

3、强制类型转换前,Java建议我们做什么事情?

  • 使用instanceof判断当前对象的真实类型:对象 instanceof 类型。

举例:

public class Test {
    public static void main(String[] args) {
        
        Animal a1 = new Wolf();
        go(a1);

        Animal a2 = new Tortoise();
        go(a2);
    }
    //使用多态时,调用子类的特有方法(强制类型转换)
    public static void go(Animal a){
        System.out.println("开始...");
        if(a instanceof Wolf){
            Wolf w1 = (Wolf) a;
            w1.eatSheep();
        }else if(a instanceof Tortoise){
            Tortoise t1 = (Tortoise) a;
            t1.shrinkHead();
        }
    }
}

运行结果:

以上就是Java中多态的全部内容,想了解更多Java知识,请关注本博主~~

标签:类型转换,Java,Tortoise,对象,子类,基础,多态
From: https://blog.csdn.net/qq_63981644/article/details/143288615

相关文章