java 父类引用子类对象时编译器报错

安诺知秋 2018-04-24 08:56:05
package monsterTestDrive;
public class MonsterTestDrive {

public static void main(String[] args){
final Monster[] ma = new Monster[3];
ma[0] = new Vampire();
ma[1] = new Dragon();
ma[3] = new Monster();
//无法通过编译,对这三个子类对象的引用报错:没有任何MonsterTestDrive的外层实例可访问,求大神帮忙分析下,小白感激不尽。
for(Monster m : ma)
m.frighten();
}

class Monster{
boolean frighten() {
System.out.println("arrgh");
return true;
}
}

class Vampire extends Monster{
boolean frighten() {
System.out.println("a bite?");
return true;
}
}

class Dragon extends Monster{
boolean frighten() {
System.out.println("breath fire");
return true;
}
}
}
...全文
312 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
国产星期八 2018-04-24
  • 打赏
  • 举报
回复
你好,上述代码存在2处异常。一是数组越界,二是编译异常。首先把 ma[3] = new Monster(); 改为 ma[2] = new Monster(); 解决数组越界问题。编译异常有两种解决方法,第一在内部类 class 关键字前加上 static 关键字,比如 static class Monster;第二,把内部类移出类MonsterTestDrive,其他代码不变。出现编译异常的原因是,你的main函数是static的,但是你的内部类却是动态的,在java中,静态方法不能调用动态变量或方法,所以编译不过

50,626

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧