标题:super()语句的应用困惑(知识源至于。成员变量的隐藏和方法的覆盖)
只看楼主
mx250052
Rank: 2
等 级:论坛游民
帖 子:61
专家分:25
注 册:2009-3-1
结帖率:77.78%
已结贴  问题点数:60 回复次数:6 
super()语句的应用困惑(知识源至于。成员变量的隐藏和方法的覆盖)
我的代码就是为了试着实现以下的功能:       子类在隐藏了父类的成员变量或重写了父类的方法或,有时还需要用到父类的成员变量,或在重写的方法中被重写的方法以简化代码。

程序代码:
class SuperClass{
   int x;
   superClass(){
      x=3;
      System.out.println("in superClass: x="+x);
   }
   void doSomething(){
      System.out.println("in superClass.doSomething()");
   }
}
class subclass extends superClass{
   
   int x;
   subclass(){
      super();  //call constructor of superClass 
      x=5;
      System.out.println("in subclass: x="+x);
      
    }
    void doSomething(){
      super.doSomething(); //call method of superClass
      System.out.println("in subclass.doSomething()");
      System.out.println("super x="+super.x+"    sub.x="+x);
    }
}
public class Inheritance{
   public static void main(String[] args){
     subclass subC=new subclass();
     subC.doSomething();
   }
}
课本上给的程序代码:结果编译时出现:
E:\JAVA\Test01>javac Inheritance.java
Inheritance.java:3: 方法声明无效;需要返回类型
   superClass(){
   ^
1 错误

我发现课本给的代码错误好多(自认为,也希望高手指出一些课本上代码的错误之处),于是我运用我所学的知识改成了:
程序代码:
class SuperClass{
   int x;
   void superClass(){
      x=3;
      System.out.println("in superClass: x="+x);
   }
   void doSomething(){
      System.out.println("in superClass.doSomething()");
   }
}
class SubClass extends SuperClass{
   
   int x;
    void subClass(){
      super();  //call constructor of superClass 
      x=5;
      System.out.println("in subClass: x="+x);
      
    }
    void doSomething(){
      super.doSomething(); //call method of superClass
      System.out.println("in subClass.doSomething()");
      System.out.println("super x="+super.x+"    sub.x="+x);
    }
}
public class Inheritance{
   public static void main(String[] args){
     SubClass subC=new SubClass();
     subC.doSomething();
   }
}


结果:
E:\JAVA\Test01>javac Inheritance.java
Inheritance.java:15: 对 super 的调用必须是构造函数中的第一个语句
      super();  //call constructor of superClass
           ^
1 错误

当我把super();  //call constructor of superClass这行注释了,编译通过出现结果:
E:\JAVA\Test01>javac Inheritance.java

E:\JAVA\Test01>java Inheritance
in superClass.doSomething()
in subClass.doSomething()
super x=0    sub.x=0


可是这不是我希望的结果,我希望的结果是:
in superClass:x=3
in subClass:x=5
in superClass.doSomething()
in subclass.doSomething()
super.x=3    sub.x=5


希望高手解释一下:super()等用法:
搜索更多相关主题的帖子: 知识源 变量 super 语句 成员 
2009-07-29 10:14
紫衫
Rank: 4
来 自:风之谷
等 级:业余侠客
帖 子:126
专家分:211
注 册:2009-6-6
得分:55 
class SuperClass{
    int x;
    SuperClass(){
        x=3;
        System.out.println("in superClass: x="+x);
    }
    void doSomething(){
        System.out.println("in superClass.doSomething()");
    }
}

class SubClass extends SuperClass{
    int x;
    SubClass(){
        super();
        x=5;
        System.out.println("in subClass: x="+x);
    }
    void doSomething(){
        super.doSomething(); //call method of superClass
        System.out.println("in subClass.doSomething()");
        System.out.println("super.x="+super.x+"    sub.x="+x);
    }
}

public class Inheritance {

    public static void main(String[] args) {
        SubClass subC = new SubClass();
        subC.doSomething();
    }

}

ps:
super()是用在构造函数中的
2009-08-03 19:36
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
得分:5 
你的问题很简单
class SuperClass{
   int x;
   superClass(){
大写!

倚天照海花无数,流水高山心自知。
2009-08-03 21:00
mx250052
Rank: 2
等 级:论坛游民
帖 子:61
专家分:25
注 册:2009-3-1
得分:0 
版主,你所说的大写。
我说句实话,我真的看不明白你的意思!
2009-08-06 09:50
usbboy2009
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:39
专家分:183
注 册:2009-7-31
得分:0 
一个类的构造函数要与类名完全一样(注意开头大小写也要一样)
class SuperClass{
   int x;
   superClass(){
 构造函数应该是 SuperClass(){  

[ 本帖最后由 usbboy2009 于 2009-8-6 14:02 编辑 ]
2009-08-06 14:01
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
得分:0 
LS正解

倚天照海花无数,流水高山心自知。
2009-08-07 11:01
sonwill
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2008-3-22
得分:0 
刚运行过了,全部都是大小的引起的错误。可能楼主打错字母了!
superClass(){ //SuperClass
    x=3;       System.out.println("in superClass: x="+x);
   }
2009-09-18 13:47



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-280888-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.162153 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved