class Demo8{
class Person{
int id; //编号
String name; //姓名
int age; //年龄
//构造函数
public Person(int id,String name ,int age){
this.id = id;
this.name = name;
this.age = age;
}
//比较年龄的方法
public void compareAge(Person p2){
if(this.age>p2.age){
System.out.println(this.name+"大!");
}else if(this.age<p2.age){
System.out.println(p2.name+"大!");
}else{
System.out.println("同龄");
}
}
}
public static void main(String[] args)
{
Person p1 = new Person(110,"狗娃",17);
Person p2 = new Person(119,"铁蛋",9);
p1.compareAge(p2);
}
}
6 回答
忽然笑
TA贡献1806条经验 获得超5个赞
其实是java虚拟机运行时对class的解析与实例化的时机(顺序)问题。对于程序入口函数main来说,在它被调用时还“看”不到内部类Person呢。
解决方法有两个,一是将Person声明为static,二是将Person声明为外部类。
呼唤远方
TA贡献1856条经验 获得超11个赞
public static void main(String[] args) { Person p1 = new Demo8().new Person(110,"狗娃",17); Person p2 = new Demo8().new Person(119,"铁蛋",9); p1.compareAge(p2); }
万千封印
TA贡献1891条经验 获得超3个赞
这个是可以放的,内部类
但是main方法应该是在外部类
但是你不能再main方法中去实例化person。
你可以写个方法去实例化person
然后再main方法里调用你写的外部类的方法
月关宝盒
TA贡献1772条经验 获得超5个赞
这个是内部类实例化问题,必须依赖一个外部类的实例才能创建内部类的实例,修改main如下即可:
public static void main(String[] args) { Demo8 d = new Demo8(); Person p1 = d.new Person(110,"狗娃",17); Person p2 = d.new Person(119,"铁蛋",9); p1.compareAge(p2); }
添加回答
举报
0/150
提交
取消