6/27作业:多态

本文探讨了面向对象编程中的多态性概念,主要聚焦在Java中的体现,包括方法重载、方法覆盖和多态参数。同时,文章阐述了运行期类型与编译期类型的差异,并通过实例解释了父类引用指向子类对象的情况。在多态环境下,成员方法、静态成员方法和成员变量的调用规则也进行了详细说明。

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

1.多态性

多态性是面向对象的三大特征之一

多态的含义是:对外一种表现形式,内在有多种具体实现。

Java中多态的具体体现

方法重载

方法覆盖

多态参数(新内容,重点、难点)

2.运行期类型与编译期类型

第一种情况:编译期类型和运行期类型相同

  A  a = new A();

 a.show();

 

声明A的时候,使用到的类型A表示对象的类型,被称为编译期类型,在编译期,虚拟机认为a的类型是A,对于a所使用的属性和方法的有效性将到类A中去验证。

构造方法A()中的A是运行期类型,在运行期,将执行运行期类型中的方法

第二种情况:当有继承关系时,可能发生编译期类型和运行期类型不同的情况,即编译期类型是父类类型,运行期类型是子类类型。

//A类是B类的父类                              

A  ab = new B();

ab.show();

对象ab的编译期类型为父类A类,运行期类型为子类B类。

如果一个引用的编译期类型和运行期类型不同,那么一定是编译期类型与运行期类型有父类子类关系。

ab对象使用的方法,在编译期到类A中去校验,而运行则执行B类的方法

如果一个对象的编译期类型是父类,运行期类型是子类,可以对该对象进行强制类型转换,将其编译器类型转换为与运行期类型相同的类型,即:B b=(B)ab;

3.父类引用指向子类对象

当编译器类型是父类,运行期类型是子类时,被称为父类引用指向子类对象

class  Animal{

               ……

}

class Cat  extends Animal{

               ……

}

class Dog extends Animal {

               ……

}

Cat m = new Cat()

Animal x = new Cat()  //Animal 的引用指向Cat的对象

对象m可以调用猫类中的所有方法,x只能调用动物类中定义的方法,

猫类扩展的新方法不能调用。

 

 

 

4.多态环境下对成员方法的调用

class  Animal{

           void show() {

             System.out.println(Anmial");

          }

}

class Cat  extends Animal{

              void show() {

                    System.out.println(cat");

              }

}

…….

Animal x = new Cat()

   x.show() //调用的是子类中的方法

 

 

简单的说:编译看左边,运行看右边

 

 

多态环境下对静态成员方法的调用

class  Animal{

          static  void show() {

             System.out.println(Animal");

          }

}

class Cat extends Animal {

             static  void show() {

                    System.out.println(Cat");

              }

}

…….

Animal x = new Cat()

   x.show() //调用的是动物类中的静态成员方法。

简单的说:编译和运行都看左边。

多态环境下对成员变量的调用

class Animal{

       int num = 3;

}

class Cat  extends Animal {

       int  num = 4;

}

…….

Animal x = new Cat()

x.num; //调用的是动物类中的成员变量。

简单的说:编译和运行都看等号左边。

    注意:变量不存在被子类覆写这一说法,只有方法存在覆写。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值