多态时,成员的特点:
1.成员变量。
编译时,参考引用型变量所属的类中是否有调用的成员变量。有,编译通过。无,编译失败。
运行时,参考引用型变量所属的类中是否有调用的成员变量,并运行该所属类中的成员变量。
大白话就是:编译和运行时都参考等号的左边即可。
2.成员函数(非静态)
编译时,参考引用型变量所属的类中是否有调用的成员函数。有,编译通过。无,编译失败。
运行时,参考的是对象所属的类中是否有调用的函数。
大白话就是:编译看左边,运行看右边。
3.静态函数
编译时,参考引用型变量所属的类中是否有调用的静态方法.
运行时,参考引用型变量所属的类中是否有调用的静态方法.
大白话就是:编译和运行都看左边.
1.成员变量。
编译时,参考引用型变量所属的类中是否有调用的成员变量。有,编译通过。无,编译失败。
运行时,参考引用型变量所属的类中是否有调用的成员变量,并运行该所属类中的成员变量。
大白话就是:编译和运行时都参考等号的左边即可。
2.成员函数(非静态)
编译时,参考引用型变量所属的类中是否有调用的成员函数。有,编译通过。无,编译失败。
运行时,参考的是对象所属的类中是否有调用的函数。
大白话就是:编译看左边,运行看右边。
3.静态函数
编译时,参考引用型变量所属的类中是否有调用的静态方法.
运行时,参考引用型变量所属的类中是否有调用的静态方法.
大白话就是:编译和运行都看左边.
其实对于静态方法:是不需要对象的,直接用类名调用即可。
class Fu
{
int NUM=8;
void show()
{
System.out.println("随意");
}
}
class Zi extends Fu
{
int NUM=9;
void show()
{
System.out.println("随便");
}
}
class DuoTai
{
public static void main(String[] args)
{
Fu f= new Zi();
System.out.println(f.NUM);//结果会是8.
//以上,如果父类中没有int变量的话,结果会报错。
Zi z= new Zi();
System.out.println(z.NUM);//结果会是9.
//以上,如果子类中没有Int变量的话,结果就会是8.
System.out.println("------------");
Fu f1= new Zi();
f1.show();//结果会是”随便“,因为创建对象后,f1就指向了子类创建的对象.
//所以调用的方法就应该是对象的方法
//但是如果父类中没有方法的话,编译就会报错。是不会出现运行子类方法的。
}
}