多态的特点

本文详细介绍了Java中的多态特性,包括向上转型和向下转型。通过实例展示了如何使用父类引用指向子类对象,以及如何进行类型转换。在向上转型中,可以调用父类的所有公共成员,而在向下转型后,可以访问子类特有的方法。
摘要由CSDN通过智能技术生成

提示:本文为学习java基础篇的笔记 详解视频见于B站【零基础 快速学Java】韩顺平 零基础30天学会Java

文章目录


前言

     多态的前提是两个对象(类)存在继承关系


提示:以下是本篇文章正文内容,下面案例可供参考

二、多态的特点

1.向上转型

(1)本质:父类的引用指向了子类的对象

(2)语法:父类类型  引用名 = new  子类类型();

(3)特点:编译类型看左边,运行类型看右边

可以调用父类中的所有成员(需遵守访问权限),不能调用子类中特有成员;最终运行效果看子类的具体实现;

代码如下(示例):

Animal.class:

public class Animal {
    String name = "动物";
    int age = 10;

    public void sleep() {
        System.out.println("睡");
    }

    public void run() {
        System.out.println("跑");
    }

    public void eat() {
        System.out.println("吃");
    }

    public void show() {
        System.out.println("hello,你好");
    }
}

Cat.class:

public class Cat extends Animal{
    public void eat() //方法重写
    {
        System.out.println("猫吃鱼");
    }

    public void catchMouse() {
        System.out.println("猫抓老鼠");
    }
}

PolyDetail:

public class PolyDetail {
    public static void main(String[] args) {
        //多态的向上转型:父类的引用指向了子类的对象
        Animal animal = new Cat();

        Object object = new Cat();
        //向上转型调用方法的规则如下:
        //(1)可以调用父类的所有成员
        //(2)不能调用子类的特有的成员(重点)
        //(3)在编译阶段,能调用那些成员,是由编译类型来决定的
        //(4)最终运行效果看子类的具体实现,即调用方法时,按照子类开始查找方法
        //然后调用规则按照之前的规则
        animal.eat();//猫吃鱼
        animal.run();//跑
        animal.sleep();//睡

    }
}

运行结果:

 
2.向下转型

(1)语法:子类类型   引用名 = (子类类型) 父类引用

(2)只能强转父类的引用,不能强转父类的对象

(3)要求父类的引用必须指向的是当前目标类型的对象

(4)可以调用子类类型中所有的成员

代码如下(示例):


public class PolyDetail {
    public static void main(String[] args) {
        //多态的向上转型:父类的引用指向了子类的对象
        Animal animal = new Cat();

        Object object = new Cat();

        //多态的向下转型
        //(1)语法:子类类型 引用名 = (子类类型) 父类引用
        //编译类型和运行类型都是Cat
        Cat cat = (Cat) animal;
        cat.catchMouse();//猫抓老鼠
        //(2)要求父类的引用必须指向的是当前目标类型的对象
        // Dog dog =(Dog) animal;//不可以 Dog和cat是同一级
    }
}

Dog.class 

public class Dog extends Animal {
    public void eat() //方法重写
    {
        System.out.println("猫吃鱼");
    }

    public void DogBone() {
        System.out.println("狗吃骨头");
    }
}

运行结果:

如果父类的引用指向Dog类型的对象

运行结果:

总结


以上就是今天要讲的内容,本文仅仅简单介绍了多态的特点,多态的向上转型和向下转型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

淘尽红尘几多娇

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

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

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

打赏作者

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

抵扣说明:

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

余额充值