import java.io.*;
class A {
public void fun1() {
System.out.println("111");
} //定义父类中非静态的fun1方法
public static void fun2() {
System.out.println("222");
} //定义父类中静态的fun2方法
}
class B extends A {
public void fun1() {
System.out.println("333");
} //覆写父类A中非静态的fun1方法
public static void fun2() {
System.out.println("444");
} //覆写父类A中静态的fun2方法
public void fun3() {
System.out.println("555"); } //定义子类自己的方法
}
class test {
public static void main(String[] args) throws java.lang.Exception {
System.out.println("hi");
A a = new B();
a.fun1(); // 子类重写父类非静态方法,多态下访问的是子类的成员方法。
a.fun2(); // 子类重写父类静态方法,多态下访问的是父类的静态方法。
a.fun3(): // 无法执行,父类中没有定义fun3方法
}
}
总结下的话就是:
1:当父类和子类具有相同的非静态成员变量,那么在多态下访问的是父类的成员变量
2:当父类和子类具有相同的静态成员变量,那么在多态下访问的是父类的静态成员变量
所以:父类和子类有相同的成员变量,多态下访问的是父类的成员变量。
3:当父类和子类具有相同的非静态方法(就是子类重写父类方法),多态下访问的是子类的成员方法。
4:当父类和子类具有相同的静态方法(就是子类重写父类静态方法),多态下访问的是父类的静态方法。
@爵士稿手
网友评论