如题:
代码如下:
public class Main
{
public void a(){
System.out.println("这是Main类中的a方法");
}
public static void main(String[] args) {
Main main = new A();
main.a();
}
}
class A extends Main{
public void a()
{
System.out.println("在A类里重写了父类Main的a方法");
}
}向上转型后,输出结果为A类里重写的a()方法
如果将a方法声明为static
即
package tongji.edu.com;
public class Main
{
public static void a(){
System.out.println("这是Main类中的a方法");
}
public static void main(String[] args) {
Main main = new A();
main.a();
}
}
class A extends Main{
public static void a()
{
System.out.println("在A类里重写了父类Main的a方法");
}
}输出结果为父类里的a方法。重写无效。
总结如下:
Main main = new A();
(1)多态中成员函数的特点:成员函数在多态调用时,编译看左边,运行看右边。
(2)多态中成员变量的特点:无论编译和运行,都参考左边(引用型变量所属的类).
(3)多态中静态成员函数的特点 :无论编译和运行,也都参考左边。
无论编译和运行,都参考左边,所以调用的是左边Main类的方法。
也就是说,向上转型时,无论是成员变量还是静态成员函数,都不会被重写。
本文探讨了Java中多态的概念及其在实例方法与静态方法中的表现。通过具体的代码示例,展示了多态调用的特点:对于实例方法,遵循编译看左、运行看右的原则;而对于静态方法,则始终依据左边类型进行调用。
892

被折叠的 条评论
为什么被折叠?



