黑马程序员之多态中成员变量与成员函数的异同

本文通过一个具体的Java多态示例,详细解析了父类引用指向子类实例时,成员变量和成员方法的调用机制。重点阐述了非静态成员变量与非静态成员方法在编译期及运行期的不同表现。

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

------- android培训java培训、期待与您交流! ---------

先举个小例子引出问题吧:

//多态例子:

//父类

class Fu
{
int num = 3;
void print(){
System.out.println("父类");
}
}

//子类
class Zi extends Fu
{
int num = 4;
void print(){
System.out.println("子类");
}
}
class DuoTaiDemo3
{
public static void main(String[] args)
{
Fu f = new Zi();
System.out.println(f.num);//输出结果:3

f.print();//输出结果:子类

}
}

输出结果为什么会一个按父类输出,一个按子类输出?看完下面的解释就会明白了。^^

 

引用型变量:

TV yaokongqi=new TV();其中yaokongqi指的就是引用
 

一, 非静态成员变量的特点

①,编译时期特点
   |-- 引用型变量所在的类中(即父类),没定义这个变量编译失败(父类中没有这个变量,不管子类有没有都会编译失败,因为你这时候是相当于父,父不能用子的属性)
   |-- 引用型变量所在的类中,定义了这个变量编译成功
②,运行时期特点

    |-- 运行时期,参考引用型变量所属的类中的结果
二,非静态成员方法的特点
①,编译时期特点
    |-- 编译时期,参考引用型变量所在的类中,有没有定义这个方法,有编译成功,没有编译失败(父类必须有这个类)
②,运行时期特点
    |-- 运行时期,虚拟机动态的绑定到了子类对象中,运行的是子类中重写的方法
三,静态成员变量特点
①,编译时期特点
    |-- 参考引用型变量所在的类中,是否定义了静态变量,定义了编译成功,没定义编译失败
②,运行时期特点
    |-- 参考引用型变量所在类中的结果
四,静态成员方法特点
①,编译时期特点
    |-- 参考引用型变量所在类中,是否定义了这个静态方法,没有定义编译失败,定义了就编译成功
②,运行时期特点
    |--参考引用型变量所在类中的静态方法

总结:
成员变量
|-- 不论是静态成员变量还是非静态成员变量
编译时期参考等号左边
运行时期参考等号左边
成员方法
|-- 静态成员方法
编译时期参考等号左边
运行时期参考等号左边
|-- 非静态成员方法
编译时期参考等号左边
运行时期参考等号右边 虚拟机将动态绑定到子类对象中

 

说明

public static void main(String[] args)
{
Fu f = new Zi();
System.out.println(f.num);//非静态成员变量运行时期,输出结果参考引用型变量所属的类中的结果,即要参考Fu类中的值"3"
f.print();//非静态成员方法运行时期,虚拟机动态的绑定到了子类对象中,运行的是子类中重写的方法,即要参考Zi类中的方法,所以输出"子类"
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值