java学习--多态及多态的成员特点

本文详细解析面向对象三大特性:封装、继承、多态,并通过实例代码展示多态的实现方式和特点,包括成员变量、成员函数、静态成员函数在多态中的行为,以及向上类型转换和向下类型转换的用法。

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

面向对象三大特性:封装、继承、多态,封装和继承几乎都是为多态而准备的。多态的概念可以理解为统一的接口,不同的表现形式。多态==晚绑定。先来介绍多态相关的理论性知识点:

1、多态的体现

父类的引用指向了自己的子类对象,比如 Parent p = new Child();

2、多态的前提

必须是类与类之间有关系:继承或实现

父类引用指向子类对象

要有重写

3、多态的利弊

利:大大提高了程序的扩展性

弊:只能使用父类的引用访问父类的成员

4、实现方式

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


在多态中,成员变量的特点:无论编译还是运行,都参考左边(引用型变量所属的类)Fu f = new Zi();   Zi z = new Zi();

在多态中,成员函数的特点编译看左边,运行看右边Fu f = new Zi();

在多态中,静态成员函数的特点,无论编译还是运行,都看左边

多态是一种运行期的行为,不是编译期的行为。当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误,如果有,再去调用子类的该同名方法(编译看左边,运行看右边)。注意此处,静态static方法属于特殊情况,静态方法只能继承,不能重写Override,如果子类中定义了同名同形式的静态方法,它对父类方法只起到隐藏的作用。调用的时候用谁的引用,则调用谁的版本如果想要调用子类中有而父类中没有的方法,需要进行强制类型转换。因为当用父类的引用指向子类的对象,用父类引用调用方法时,找不到父类中不存在的方法。这时候需要进行向下的类型转换,将父类引用转换为子类引用。

多态示例代码

public class PolyTest
{
    public static void main(String[] args)
    {
        
        //向上类型转换
        Cat cat = new Cat();
        Animal animal = cat;
        animal.sing();

                
        //向下类型转换
        Animal a = new Cat();
        Cat c = (Cat)a;
        c.sing();
        c.eat();


        //编译错误
        //用父类引用调用父类不存在的方法
        //Animal a1 = new Cat();
        //a1.eat();
        
        //编译错误
        //向下类型转换时只能转向指向的对象类型        
        //Animal a2 = new Cat();
        //Cat c2 = (Dog)a2;
        


    }
}
class Animal
{
    public void sing()
    {
        System.out.println("Animal is singing!");
    }
}
class Dog extends Animal
{
    public void sing()
    {
        System.out.println("Dog is singing!");
    }
}
class Cat extends Animal
{
    public void sing()
    {
        System.out.println("Cat is singing!");
    }
    public void eat()
    {
        System.out.println("Cat is eating!");
    }
}

两种类型的类型转换

  (1)向上类型转换(Upcast):将子类型转换为父类型。

  对于向上的类型转换,不需要显示指定,即不需要加上前面的小括号和父类类型名。

  

 

  (2)向下类型转换(Downcast):将父类型转换为子类型。

  对于向下的类型转换,必须要显式指定,即必须要使用强制类型转换

  

 

  并且父类型的引用必须指向子类的对象,即指向谁才能转换成谁。

  不然也会编译出错:

 

 

  因为父类引用指向的是Cat类的对象,而要强制转换成Dog类,这是不可能的。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值