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 不存在!
难道内部类不可以这样被外部类调用的吗?
请高手指点!!! 展开
{
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 不存在!
难道内部类不可以这样被外部类调用的吗?
请高手指点!!! 展开
6个回答
展开全部
服了你了,能把程序写成这样。一个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();
}
}
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();
}
}
展开全部
首先,你要搞清楚静态方法跟非静态方法的区别:
非静态方法是跟随着类的生命周期的,当类实例化时,非静态方法跟随着实例化对象产生,实例化对象可以调用类中的非静态方法,当实例化对象结束时,非静态方法也跟着结束。就是说,非静态方法是依附于实例化对象的,它的生命周期就是实例化对象的生命周期。
静态方法是不受制于类的实例化对象的,即静态方法从程序开始运行到最后释放内存结束是一直存在的,它的生命周期就是程序的生命周期。
从以上可知,静态方法调用非静态方法会造成一个问题,就是生命周期的不一致,比如说:程序刚刚开始运行时,类的实例化构造函数还没有执行,这时静态方法是调用不了非静态方法的;或者当实例化对象消亡之后,静态方法也是不能够去调用非静态方法的。
静态方法要想调用非静态方法,必须要通过实例化对象去调用;当然也可以把非静态方法变成静态方法,这样就不存在任何障碍了。
希望我的回答对你能够有所帮助。
非静态方法是跟随着类的生命周期的,当类实例化时,非静态方法跟随着实例化对象产生,实例化对象可以调用类中的非静态方法,当实例化对象结束时,非静态方法也跟着结束。就是说,非静态方法是依附于实例化对象的,它的生命周期就是实例化对象的生命周期。
静态方法是不受制于类的实例化对象的,即静态方法从程序开始运行到最后释放内存结束是一直存在的,它的生命周期就是程序的生命周期。
从以上可知,静态方法调用非静态方法会造成一个问题,就是生命周期的不一致,比如说:程序刚刚开始运行时,类的实例化构造函数还没有执行,这时静态方法是调用不了非静态方法的;或者当实例化对象消亡之后,静态方法也是不能够去调用非静态方法的。
静态方法要想调用非静态方法,必须要通过实例化对象去调用;当然也可以把非静态方法变成静态方法,这样就不存在任何障碍了。
希望我的回答对你能够有所帮助。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
声明必须是"类的内部类"类型, 而实例化是用外部类的实例, 来实现内部类. 也就是说, 应该声明为:
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();
}
}
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();
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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");
}
}
}
{
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");
}
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
一个文件里只能一个public类,你肯定是代码一起乐,搞的有两个pulic类,当然出错,把你的test类独立出来别写在一个文件里。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询