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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈劲松 中级黑马   /  2015-8-25 18:13  /  679 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 陈劲松 于 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()方法,为何啊?


7 个回复

倒序浏览
多态是前题是继承!
回复 使用道具 举报
顶一下~~~~~~~~~~~~
回复 使用道具 举报
我好像知道了,Sub类中的a()方法是继承并复写父类的,而String student并不是复写父类的int student ,是独属于子类的新变量。
回复 使用道具 举报
你这个子类并没有构造方法吧,那是成员方法;
class Base {
   String student = 1
   //构造方法
   Base(Strint student) {        this.student = student;
   }

}


回复 使用道具 举报
本帖最后由 pengbeilin 于 2015-8-25 23:33 编辑

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

你把a方法加静态试试~
回复 使用道具 举报
Vincent饭饭 发表于 2015-8-25 21:49
你这个子类并没有构造方法吧,那是成员方法;
class Base {
   String student = 1

对 注释是后来加的 弄错了
回复 使用道具 举报
pengbeilin 发表于 2015-8-25 23:32
父类方法创建子类对象时:
1 调用成员变量时看父类的初始值
2 调用非静态方法看子类方法

原来是这样,我试试
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马