A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

在多态中成员变量的特点:
    无论编译还是运行时,都参考左边(引用型变量所属的类)
在多态中,静态成员函数的特点:
    无论编译还是运行时,都参考左边;
实例代码:
  1. class Fu//父类
  2. {
  3.         static int num = 9;
  4.         void metd1()
  5.         {
  6.                 System.out.println("metd1");
  7.         }
  8.         void metd3()
  9.         {
  10.                 System.out.println("metd3");
  11.         }
  12.         static void metd5()
  13.         {
  14.                 System.out.println("metd5");
  15.         }
  16. }
  17. class Zi/*子类*/ extends Fu
  18. {
  19.         static int num = 7;
  20.         void metd1()
  21.         {
  22.                 System.out.println("metd1_z");
  23.         }
  24.         void metd2()
  25.         {
  26.                 System.out.println("metd2_z");
  27.         }
  28.         static void metd5()
  29.         {
  30.                 System.out.println("metd5_z");
  31.         }
  32. }
  33. public class Test {
  34.         public static void main(String[] args)
  35.         {
  36.                 System.out.println("---------------多态的时候,对于非静态方法,");
  37.                 System.out.println("---------------只能调用继承的或覆盖的方法,否则编译报错");
  38.                 Fu f = new Zi();
  39.                 f.metd1();
  40.                 //f.metd2();//报错
  41.                 f.metd3();
  42.                 Zi z = new Zi();
  43.                 z.metd1();//打印:metd1_z
  44.                 z.metd2();//打印:metd2
  45.                 z.metd3();//打印:metd3
  46.                 System.out.println("---------------若想要调用,子类中的新方法即不是从父类覆盖");
  47.                 System.out.println("---------------或者继承的方法的时候,必须向下转型");
  48.                 ((Zi)f).metd2();
  49.                 System.out.println("---------------多态时,调用静态成员变量,看引用变量的声明类");
  50.                 System.out.println(f.num);//打印:9,而不是7,多态的时候父类中静态成员变量不会被覆盖
  51.                 System.out.println(z.num);//打印:7
  52.                 System.out.println(((Zi)f).num);//打印:7,当然,转型之后就相当于z.num
  53.                 System.out.println("---------------多态时,调用静态成员方法,也是看引用变量的声明类");
  54.                 f.metd5();//打印:metd5,而不是metd5_z,多态的时候父类中静态成员方法不会被覆盖
  55.                 z.metd5();//打印:metd5_z
  56.                 ((Zi)f).metd5();//打印:metd5_z
  57.         }
  58. }
复制代码

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马