在多态中成员变量的特点:
无论编译还是运行时,都参考左边(引用型变量所属的类)
在多态中,静态成员函数的特点:
无论编译还是运行时,都参考左边;
实例代码:
- class Fu//父类
- {
- static int num = 9;
- void metd1()
- {
- System.out.println("metd1");
- }
- void metd3()
- {
- System.out.println("metd3");
- }
- static void metd5()
- {
- System.out.println("metd5");
- }
- }
- class Zi/*子类*/ extends Fu
- {
- static int num = 7;
- void metd1()
- {
- System.out.println("metd1_z");
- }
- void metd2()
- {
- System.out.println("metd2_z");
- }
- static void metd5()
- {
- System.out.println("metd5_z");
- }
- }
- public class Test {
- public static void main(String[] args)
- {
- System.out.println("---------------多态的时候,对于非静态方法,");
- System.out.println("---------------只能调用继承的或覆盖的方法,否则编译报错");
- Fu f = new Zi();
- f.metd1();
- //f.metd2();//报错
- f.metd3();
- Zi z = new Zi();
- z.metd1();//打印:metd1_z
- z.metd2();//打印:metd2
- z.metd3();//打印:metd3
- System.out.println("---------------若想要调用,子类中的新方法即不是从父类覆盖");
- System.out.println("---------------或者继承的方法的时候,必须向下转型");
- ((Zi)f).metd2();
- System.out.println("---------------多态时,调用静态成员变量,看引用变量的声明类");
- System.out.println(f.num);//打印:9,而不是7,多态的时候父类中静态成员变量不会被覆盖
- System.out.println(z.num);//打印:7
- System.out.println(((Zi)f).num);//打印:7,当然,转型之后就相当于z.num
- System.out.println("---------------多态时,调用静态成员方法,也是看引用变量的声明类");
- f.metd5();//打印:metd5,而不是metd5_z,多态的时候父类中静态成员方法不会被覆盖
- z.metd5();//打印:metd5_z
- ((Zi)f).metd5();//打印:metd5_z
- }
- }
复制代码 |
|