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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

class Phone
{
public static void show()
{
  System.out.println("number");
}
}
class NewPhone extends Phone
{
public  void show()
{
    super.show();   //编译时报错???
       System.out.println("message");
    System.out.println("hehe");
}
}
class Demo5
{
public static void main(String[] args)
{
  NewPhone p=new NewPhone();
  p.show();
}
}

编译时出错,按理说,非静态调用静态是可以的呀,为什么会报错呢?

`}6{FCXT$4GKNHLLF)R1$7Q.jpg (12.1 KB, 下载次数: 562)

`}6{FCXT$4GKNHLLF)R1$7Q.jpg

评分

参与人数 1技术分 +1 收起 理由
包晗 + 1

查看全部评分

14 个回复

倒序浏览
冰兄,先回复了再看题,等哥回答。。。
回复 使用道具 举报
jvm说的很清楚 了
回复 使用道具 举报
子类非静态方法不能覆盖父类的静态方法,只有静态方法才能覆盖静态方法

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1

查看全部评分

回复 使用道具 举报
其实这是一个 方法重写的错。  静态只能覆盖静态,你的show方法是不能被重写的。

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

回复 使用道具 举报
黑马杨晨 发表于 2012-8-26 21:50
jvm说的很清楚 了

为什么会报错呢
回复 使用道具 举报
冯心程 黑马帝 2012-8-26 22:01:11
7#
父类show是静态的 直接用类名就能引用
静态只能覆盖静态
你说的是非静态能“访问”静态 不是“覆盖 ”
冰哥知识学杂了

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

回复 使用道具 举报
夏天 初级黑马 2012-8-26 22:01:12
8#
方法重写必须要一模一样,如果你用eclipse编译的话,就会发现,报如下的错
                Multiple markers at this line
        - overrides Phone.show
        - This instance method cannot override the static method from Phone
而不是你标记的那一行。你标记的那一行 忽悠人了
回复 使用道具 举报
夏天 初级黑马 2012-8-26 22:02:02
9#
解决办法,你把子类的show名字改了就OK了。
回复 使用道具 举报
super调用静态的上下文,比如静态方法和静态成员变量 super可以调用的是父类的成员函数(即非静态的)和成员变量(即非静态的),需要调用父类的类函数和类变量则需要用父类名调用. 带static只能 super.show();改成a.show();
回复 使用道具 举报
首先给您四个结论
1)
1.静态方法可以覆盖静态方法。
2.非静态方法可以覆盖非静态方法。
3.静态方法不可以覆盖非静态方法。
4.非静态方法不可以覆盖静态方法。
2)改正的方式:
要么修改NewPhone类的show函数名称;要么将此show()方法修改为静态的,同时注意不能用super来调用噢。
:sleepy:,希望能对你有帮助。
回复 使用道具 举报
黑马张强 发表于 2012-8-26 22:20
super调用静态的上下文,比如静态方法和静态成员变量 super可以调用的是父类的成员函数(即非静态的)和成员变 ...

回答错误~~
回复 使用道具 举报
小康康 发表于 2012-8-26 22:23
首先给您四个结论
1)
1.静态方法可以覆盖静态方法。

完全可以用super调用
回复 使用道具 举报
夏诗瑶 发表于 2012-8-26 22:37
完全可以用super调用

我看错你的回答了,静态里面是不能用super和this的。[color=Red]不好意思
回复 使用道具 举报
我看错你的回答了,静态里面是不能用super和this的。不好意思
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马