Java 内部类如何被外部类调用

classOuter{privateintsize=10;publicclassInner{publicvoiddoStuff(){System.out.println(... class Outer
{
private int size=10;
public class Inner
{
public void doStuff()
{
System.out.println(++size);
}
}
}
public class Test
{
public static void main(String [] args)
{
Outer outer=new Outer();
outer.Inner inner=outer.new Inner();
inner.doStuff();
}
}

为什么我编译上面这个程序,会出现这过错误!
软件包:outer 不存在!

难道内部类不可以这样被外部类调用的吗?
请高手指点!!!
展开
 我来答
Draconious
推荐于2017-09-19 · TA获得超过6242个赞
知道大有可为答主
回答量:2142
采纳率:0%
帮助的人:2583万
展开全部
服了你了,能把程序写成这样。一个java文件里可以有多个类,但只能有一个public类,而且这个类必须是外部类,不能是内部类。而且你在Test里实例化inner的方法也不对,inner的类型始终是Outer.Inner,不会因为Outer实例化而变成outer.Inner,只不过编译器还没有报出那里的错误而已。写成这样:

class Outer{
private int size=10;
class Inner{
public void doStuff(){
System.out.println(++size);
}
}
}

public class Test{
public static void main(String [] args){
Outer outer=new Outer();
Outer.Inner inner=outer.new Inner();
inner.doStuff();
}
}
郭某人来此
2015-09-13 · TA获得超过1645个赞
知道答主
回答量:952
采纳率:100%
帮助的人:89.4万
展开全部
首先,你要搞清楚静态方法跟非静态方法的区别:

非静态方法是跟随着类的生命周期的,当类实例化时,非静态方法跟随着实例化对象产生,实例化对象可以调用类中的非静态方法,当实例化对象结束时,非静态方法也跟着结束。就是说,非静态方法是依附于实例化对象的,它的生命周期就是实例化对象的生命周期。

静态方法是不受制于类的实例化对象的,即静态方法从程序开始运行到最后释放内存结束是一直存在的,它的生命周期就是程序的生命周期。

从以上可知,静态方法调用非静态方法会造成一个问题,就是生命周期的不一致,比如说:程序刚刚开始运行时,类的实例化构造函数还没有执行,这时静态方法是调用不了非静态方法的;或者当实例化对象消亡之后,静态方法也是不能够去调用非静态方法的。

静态方法要想调用非静态方法,必须要通过实例化对象去调用;当然也可以把非静态方法变成静态方法,这样就不存在任何障碍了。

希望我的回答对你能够有所帮助。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Nigel_FB
2009-07-29 · TA获得超过1386个赞
知道小有建树答主
回答量:470
采纳率:0%
帮助的人:397万
展开全部
声明必须是"类的内部类"类型, 而实例化是用外部类的实例, 来实现内部类. 也就是说, 应该声明为:
Outer.Inner inner=outer.new Inner();

完整代码:
class Outer
{
private int size=10;
public class Inner
{
public void doStuff()
{
System.out.println(++size);
}
}
}
public class Test
{
public static void main(String [] args)
{
Outer outer=new Outer();
Outer.Inner inner=outer.new Inner();
inner.doStuff();
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ajax_2003
2009-07-29 · TA获得超过4995个赞
知道大有可为答主
回答量:2628
采纳率:0%
帮助的人:2473万
展开全部
public class Test
{
public static void main(String[] arsg)
{
OutterClass oc = new OutterClass();
OutterClass.InnerClass ic = oc.new InnerClass();
ic.prt();
}
}

class OutterClass
{
class InnerClass
{
void prt()
{
System.out.println("InnerClass");
}
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
daay1986
2009-07-29 · TA获得超过6018个赞
知道大有可为答主
回答量:2208
采纳率:0%
帮助的人:1472万
展开全部
一个文件里只能一个public类,你肯定是代码一起乐,搞的有两个pulic类,当然出错,把你的test类独立出来别写在一个文件里。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式