黑马程序员技术交流社区

标题: 关于多态的问题 [打印本页]

作者: 陈劲松    时间: 2015-8-25 18:13
标题: 关于多态的问题
本帖最后由 陈劲松 于 2015-8-25 18:21 编辑

关于多态的问题,下面直接上代码:

  1. class Base
  2. {
  3.     int student = 1;
  4.     //定义父类的构造方法a()。
  5.     void a()
  6.     {
  7.         System.out.println("fu");
  8.     }
  9. }
  10. class Sub extends Base
  11. {
  12.     //重新定义student变量。
  13.     String student = "林珊";
  14.     //定义Sub的构造方法a()。
  15.     void a()
  16.     {
  17.         System.out.println("zi");
  18.     }
  19.     public static void main(String[] args)
  20.     {
  21.         Base ls = new Sub();
  22.         //输出的是1,表明访问的是父类对象的变量。
  23.         System.out.println(ls.student);
  24.         //运行结果是zi,执行的是当前类的a()方法。
  25.         ls.a();
  26.     }      
  27. }
复制代码


ls.student输出结果是父类中的1,而ls.a()执行的确实Sub中的a()方法,为何啊?



作者: kevin986745    时间: 2015-8-25 18:31
多态是前题是继承!
作者: MUFCRyanCR7    时间: 2015-8-25 18:37
顶一下~~~~~~~~~~~~
作者: 陈劲松    时间: 2015-8-25 19:44
我好像知道了,Sub类中的a()方法是继承并复写父类的,而String student并不是复写父类的int student ,是独属于子类的新变量。
作者: Vincent饭饭    时间: 2015-8-25 21:49
你这个子类并没有构造方法吧,那是成员方法;
class Base {
   String student = 1
   //构造方法
   Base(Strint student) {        this.student = student;
   }

}



作者: pengbeilin    时间: 2015-8-25 23:32
本帖最后由 pengbeilin 于 2015-8-25 23:33 编辑

父类方法创建子类对象时:
1 调用成员变量时看父类的初始值
2 调用非静态方法看子类方法
3 调用静态方法看父类方法

你把a方法加静态试试~

作者: 陈劲松    时间: 2015-8-26 18:53
Vincent饭饭 发表于 2015-8-25 21:49
你这个子类并没有构造方法吧,那是成员方法;
class Base {
   String student = 1

对 注释是后来加的 弄错了
作者: 陈劲松    时间: 2015-8-26 18:54
pengbeilin 发表于 2015-8-25 23:32
父类方法创建子类对象时:
1 调用成员变量时看父类的初始值
2 调用非静态方法看子类方法

原来是这样,我试试




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