黑马程序员技术交流社区

标题: 在子类中使用super可以引用到父类中定义的属具体的实现怎... [打印本页]

作者: 张会文    时间: 2012-12-30 00:01
标题: 在子类中使用super可以引用到父类中定义的属具体的实现怎...
本帖最后由 张会文 于 2012-12-31 19:26 编辑

大家帮我看看这段程序那里不对,为什么调试不出来?
要实现这个
package excrise;
class Test1 {
int a=10;
}
class Test extends Test1{
      
        void t (int a){
   System.out.println(a);
   System.out.println(this.a);
   System.out.println(super.a);
  }
        public void main (String[]args){
      Test1 s=new Test1();
         int a=50;
         s.t(a);
     
      
     }
   
}


作者: 谢毅    时间: 2012-12-30 00:23
你的输出结果是50 10 10
  void t (int a){
   System.out.println(a);
   System.out.println(this.a);
   System.out.println(super.a);
  }
第一个a是参数里的局部变量,第二个a是当前引用指向对象的成员变量,由于没有定义所以输出父类的a,第三个a就是父类引用指向对象的成员变量a
作者: 清水    时间: 2012-12-30 00:25
晕死, 你的代码乱的有一笔。先会打字再学编程吧。
作者: 肖志锋    时间: 2012-12-30 00:34
1.  你的主函数写错了,没有static
2.你new了个Test1,按照题意,也错了,你应该new他的子类Test,才能达到你的效果。
3.你的Test类少了一个属性 int a =20;吧
3.如果你前面3个改好了,那你的结果是:50 20 10 当然每个数字打印后都会换行。
4.其实这个a什么的,如果你不指定this,或者super的话,就是最近那个,也就是局部变量,指定了this就是这个对象的,如果自己没有也就是父类的,super直接就是父类的,不找自己的。
作者: 夏晓彤    时间: 2012-12-30 00:40
楼主代码写错了,你写的是父类调用子类方法了 ,应该这么写
Test s=new Test();
         int a=50;
         s.t(a);
结过是50 ,10,,10
作者: 李尧    时间: 2012-12-30 08:53
楼主你主函数里面建立的S是父类对象吖...这样怎么调用都是super吧..
作者: 王少雷    时间: 2012-12-30 09:32
{:soso_e179:}{:soso_e179:}
作者: 张会文    时间: 2012-12-30 13:19
xieyi17569 发表于 2012-12-30 00:23
你的输出结果是50 10 10
  void t (int a){
   System.out.println(a);

可是我的为什么提示s.t(a)的地方错误呢?还有就是this.a不应该是和a(50)相同吗?
作者: 嘿嘿小学徒    时间: 2012-12-30 14:15
本帖最后由 dustookk 于 2012-12-30 15:48 编辑
张会文 发表于 2012-12-30 13:19
可是我的为什么提示s.t(a)的地方错误呢?还有就是this.a不应该是和a(50)相同吗? ...

你的意思是不是
  1. class Test {
  2.     int a = 10;
  3. }

  4. public class TinyTest extends Test {

  5.     /**
  6.      * @param 黑马程序员
  7.      * @author 高一航
  8.      */
  9.     int a=20; // this.a 输出的是这个a,this是本类的意思
  10.    
  11.     public void t(int a) {
  12.         System.out.println(a); //这个肯定是上面一行传入的参数那个a,输出肯定是50.
  13.         System.out.println(this.a); //这个是第13行定义的a ,输出肯定是20, 建议你看看黑马视频里this关键字那一章.
  14.         System.out.println(super.a); // 父类的a输出肯定是10
  15.     }

  16.     public static void main(String[] args) {
  17.         TinyTest s = new TinyTest();
  18.         int a = 50;
  19.         s.t(a);
  20.     }

  21. }
复制代码

作者: 黄嵘才    时间: 2012-12-30 15:12
dustookk 发表于 2012-12-30 14:15
你的意思是不是

笔者的这个代码注释是不是刚好写反。
运行结果:
50
20
10




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