黑马程序员技术交流社区

标题: 子类包含于父类同名的属性,如何获得父类的该属性? [打印本页]

作者: 屈_zi    时间: 2014-5-25 08:45
标题: 子类包含于父类同名的属性,如何获得父类的该属性?
类代码:
  1. class C1{
  2.         int i = 6;
  3. }

  4. class C2 extends C1{
  5.         int i = 10;
  6. }
复制代码


如何获得父类中i的值
  1.         public static void main(String[] args) {       
  2.                 C2 c2 = new C2();
  3.                
  4.                 System.out.println(c2.i);//输出子类的i值,为10
  5.                 //如何获得父类中i的值
  6.                 System.out.println(?);
  7.         }
复制代码

作者: shi980088    时间: 2014-5-25 08:47
你可以使用多态的方式吖C1 c = new C2(); 这样c.i就是父类的属性了
作者: 飘渺≮★耘    时间: 2014-5-25 09:02
可能是这样:(C1)c2.i
作者: 飘渺≮★耘    时间: 2014-5-25 09:12
可以这样 System.out.println(super.i);
作者: Dark_Horse    时间: 2014-5-25 09:19
用super关键字获取父类对象...
作者: 屈_zi    时间: 2014-5-25 09:25
shi980088 发表于 2014-5-25 08:47
你可以使用多态的方式吖C1 c = new C2(); 这样c.i就是父类的属性了

假如c已经被C2 c = new C2();定义了,那怎么获得C1的i;
如果是C1 c = new C2();那该怎么获得C2中的i值
作者: 屈_zi    时间: 2014-5-25 09:26
飘渺≮★耘 发表于 2014-5-25 09:02
可能是这样:(C1)c2.i

应该是((C1)c2).i
作者: 屈_zi    时间: 2014-5-25 09:32
飘渺≮★耘 发表于 2014-5-25 09:12
可以这样 System.out.println(super.i);

你的应该不行吧,哪一个对象都没指定
作者: 屋檐下的期待    时间: 2014-5-25 10:48
一种使用多态,也可以使用super.变量名。
作者: 苏周周    时间: 2014-5-25 11:50
class C1{

       int i = 6;
}




class C2 extends C1{

       int i = 10;
}



class Test {
         public static void main(String[] args) {        

               C2 c2 = new C2();

               

                System.out.println(c2.i);//输出子类的i值,为10

                //如何获得父类中i的值

               System.out.println(new C1().i);

       }

}

作者: 侯金龙    时间: 2014-5-25 20:26

  1. class C1
  2. {
  3.         int i = 6;
  4. }

  5. class C2 extends C1
  6. {
  7.         int i = 10;
  8. }
  9.       
  10. class C3               
  11. {       
  12.         public static void main(String[] args)
  13.         {        
  14.                 C1 c2 = new C2();
  15.                 //如何获得父类中i的值
  16.                 System.out.println(c2.i);//输出父类的i值,为6
  17.                
  18.                 C2 c = (C2)c2;
  19.                 System.out.println(c.i);//输出子类的i值,为10
  20.         }

  21. }
复制代码

是这意思不
作者: 屈_zi    时间: 2014-5-25 20:35
侯金龙 发表于 2014-5-25 20:26
是这意思不

是的。。。
作者: 段兆洋    时间: 2014-5-25 21:31
额 这个方法就太多了。。。
作者: 凌羽猎风    时间: 2014-5-25 21:41
多态的方法比较常见吧    其他的也有  
作者: 茂子    时间: 2014-5-26 09:02
飘渺≮★耘 发表于 2014-5-25 09:12
可以这样 System.out.println(super.i);

这个super放在这里不太行哦,要想打印c1中的i,在楼主所给的主函数中不能这样使用。这句定义在c2中是对的,相当于c2子类调用父类c1的成员变量,super关键字要放在对应的子类里。。。




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