回 帖 发 新 帖 刷新版面

主题:有关super的一个奇怪问题

以下程序代码中子类调用父类方法的语句super.breathe()放在子类方法体外为什么编译报错,放在方法体内就可以通过?super语句是必须要放在方法体内吗?
代码如下:

class AnimalTest
{
    void breathe()
    {
        System.out.println("animal breathe");
    }
}
class Fish extends AnimalTest
{
    super.breathe();
    void breathe()
    {
        System.out.println("fish breathe");
    }
}
class Test
{
    public static void main(String[] args)
    {
        AnimalTest at=new AnimalTest();
        Fish fh=new Fish();
        at.breathe();
        fh.breathe();
    }
}

编译器报错如下:Animaltest.java:12: 非法的类型开始
                super.breathe();
                ^
Animaltest.java:12: 方法声明无效;需要返回类型
                super.breathe();
                      ^

回复列表 (共5个回复)

沙发

怎么可以这样写

    void breathe()
    {    
super.breathe();
        System.out.println("fish breathe");
    }

把suer放里面

板凳

[quote]怎么可以这样写

    void breathe()
    {    
super.breathe();
        System.out.println("fish breathe");
    }

把suer放里面[/quote]

为什么不行啊?是JAVA的语法要求这样的吗?我试过在父类中再声明个成员变量,把super放在外面调用父类成员变量就没问题啊?

3 楼

你写的 super.breathe(); 很明显是在调用父类方法。
然而你要明白必须在另一个方法内部调用其它方法。

4 楼

你虽然继承了父类的breathe方法,但调用必须在方法体中:
class AnimalTest
{
    void breathe()
    {
        System.out.println("animal breathe");
    }
}
class Fish extends AnimalTest
{
    
    void breathe()
    {
        super.breathe();
        System.out.println("fish breathe");
    }
}
class Test
{
    public static void main(String[] args)
    {
        AnimalTest at=new AnimalTest();
        Fish fh=new Fish();
        at.breathe();
        fh.breathe();
    }
}

5 楼

任何方法都只能在方法体内被调用,除非这样写:
static{
------------
------------
------------
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册