黑马程序员技术交流社区

标题: 多态中成员函数的特点是什么? [打印本页]

作者: 王红霞    时间: 2012-6-15 17:23
标题: 多态中成员函数的特点是什么?
多态中成员函数的特点?具体点吧

作者: 张洁    时间: 2012-6-15 17:57
一大串的估计你看了也晕。
多态首先需要子类继承父类;父类引用指向子类对象;子类对父类某方法有重写。

当多态时。
用毕老师的话,总结就是:
成员变量看左边。
成员函数看右边。


简单的例子:
class Father {
  public int age = 40;

  publi void play() {
     System.out.println("看戏~");
  }
}

class Son extends Father {
  public int age = 20;

  publi void play() {
     System.out.println("上网~");
  }
}

主函数:
  Father f = new Son();   //父类引用指向子类对象

  System.out.println(f.age);  //成员变量看左边:也就是遵循父类  结果40

  f.play();  ////成员函数看右边:也就是遵循子类  结果  “上网”

作者: 王广丛    时间: 2012-6-15 18:20
本帖最后由 王广丛 于 2012-6-15 21:52 编辑

首先看这么一个例子:
class Animal
{     int num=1;
    public  void method1()
      {
           System.out.println(1);
       }
     public  void method2()
      {
           System.out.println(2);
       }
}
class Cat extends Animal
{     int num=2;
     public  void method1()
      {
           System.out.println(11);
       }
      public void method3()
      {
           System.out.println(3);
       }
     public  static void method4()
      {
           System.out.println(3);
       }
}
class Demo
{
      public static void main(String[] args)
      {
            Animal a=new Cat();
            System.out.println(f.num);
            Cat c=new Cat();
            System.out.println(c.num);
            a.method1();
            a.method2();
            a.method3();//编辑不能通过
            ((Cat)a).method3();//只有强制类型转换后才能编译通过
            c.method4();
       }
}
运行之后可以得出结论:
在多态中成员函数的特点:
在编译时期:参阅引用型变量所属的类中是否有调用的方法。如果有,编译通过;否则编译失败。
在运行时期:参阅对象所属的类中是否有调用的方法。
简单总结一下:成员函数在多态调用时,编译看左边,运行看右边。
在多态中,成员变量的特点:
无论编译和运行,都参考左边(引用型变量所属的类)。

在多态中,静态成员函数的特点:
无论编译和运行,都参考左边。
在多态中,静态成员变量的特点:
无论编译和运行,都参考左边。

作者: 陌花╮有意、    时间: 2012-6-15 18:47
在多态中成员函数的特点:(动态绑定)
在编译时期:参阅引用型变量所属类中是否有调用的方法。如果有,编译通过,如果没有编译失败
在运行时期:参阅对象所属类中是否有调用的方法。
简单总结就是:成员函数在多态调用是,编译看左边,运行看右边
在多态中成员变量的特点:
无论编译和运行,都参考左边(引用型变量所属的类)
在多态中,静态成员函数的特点:
无论编译和运行,都参看左边
这就是静态绑定和(非静态)动态绑定的区别
我们能转换的是父类引用指向了自己的子类对象。该引用可以被提升,也可以被强制转换
多态自始至终都是子类对象在做变化





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2