在多态中,成员函数有以下特点:
1.在编译时期:参阅引用型变量所属的类中是否有 调用的方法。如果有,编译通过,没有,编译失败。
2.在运行时期:参阅对象所属的类中是否有调用的方法。
简单总结就是:成员函数在多态调用时,编译看左边,运行看右边。
在多态中,成员变量的特点:
无论编译和运行,都参考左边(引用型变量所属的类)。
在多态中,静态成员函数的特点:
1.在编译时期:参阅引用型变量所属的类中是否有 调用的方法。如果有,编译通过,没有,编译失败。
2.在运行时期:参阅对象所属的类中是否有调用的方法。
简单总结就是:成员函数在多态调用时,编译看左边,运行看右边。
在多态中,成员变量的特点:
无论编译和运行,都参考左边(引用型变量所属的类)。
在多态中,静态成员函数的特点:
无论编译和运行 ,都参考左边。
举例说明,如下所示:
class MultiShapeDemo3
{
public static void main(String[] args)
{
Father f1=new Child();
f1.method1();
f1.method2();
f1.method4();
System.out.println(f1.num);
Child f2=new Child();
f2.method1();
f2.method2();
f2.method4();
System.out.println(f2.num);
}
}
class Father
{
int num=3;
void method1()
{
System.out.println("Father method_1");
}
void method2()
{
System.out.println("Father method_2");
}
static void method4()
{
System.out.println("Father method_4");
}
}
class Child extends Father
{
int num=5;
void method1()
{
System.out.println("Child method_1");
}
void method3()
{
System.out.println("Child method_3");
}
static void method4()
{
System.out.println("Child method_4");
}
}
上述实例中,定义了两个类Father和Child,主函数在调用时,定义了两个对象f1和f2,其中对象f1引用了子类,故在调用时,如果是非静态函数 ,则会调用子类中相关的覆写方法,对于静态函数和成员变量,则会调用父类中相关的方法,所以此示例中的 输出结果如下:
Child method_1
Father method_2
Father method_4
3
Child method_1
Father method_2
Child method_4
5
通过以上分析,大家在面试时在遇到此类问题的时候,应该就会有很好的 解决方法了。