新手发帖 有内部类的编译问题

测试一下 2013-09-09 11:36:31

我编译一个有内部类的例子
http://lavasoft.blog.51cto.com/62575/179484/


/**
* 内部类创建与初始化
*
* @author leizhimin 2009-7-17 13:51:52
*/
public class Outer {
private int i = 10;
private int y = 8;

Outer() {
System.out.println("调用Outer构造方法:outer");
}

public void sayMsg() {
System.out.println("Outer class!");
}

class Inner {
int i = 1000;

Inner() {
System.out.println("调用Inner构造方法:inner");
}

void innerMsg() {
System.out.println(">>>>>Inner class!");
sayMsg();
//访问内部类自己的成员i,也可以写成 this.i++
this.i++;
//访问外部类的成员 i和y
Outer.this.i++;
y--;
}

int getI() {
return i;
}
}

public void test() {
Inner in = new Inner();
in.innerMsg();
}

public int getI() {
return i;
}

public void setI(int i) {
this.i = i;
}
}

class Test1 {
public static void main(String[] args) {
Outer outer = new Outer();
outer.test();
System.out.println(outer.getI());
System.out.println("-------1--------");

Outer.Inner iner = outer.new Inner();
iner.innerMsg();
System.out.println(iner.getI());
System.out.println("-------2--------");

System.out.println(outer.getI());
}
}

javac Test1.java 提示下面错误
Test1.java:6: 类 Outer 是公共的,应在名为 Outer.java 的文件中声明
public class Outer {
^
1 错误

=============
编译这个内部类的例子时候也是这样
http://blog.csdn.net/ilibaba/article/details/3866537?reload

public interface Contents {
int value();
}
public interface Destination {
String readLabel();
}
public class Goods {
private class Content implements Contents {
private int i = 11;
public int value() {
return i;
}
}
protected class GDestination implements Destination {
private String label;
private GDestination(String whereTo) {
label = whereTo;
}
public String readLabel() {
return label;
}
}
public Destination dest(String s) {
return new GDestination(s);
}
public Contents cont() {
return new Content();
}
}
class TestGoods {
public static void main(String[] args) {
Goods p = new Goods();
Contents c = p.cont();
Destination d = p.dest("Beijing");
}
}


也提示类似的

第一个例子编译提示错误
TestGoods.java:1: 类 Contents 是公共的,应在名为 Contents.java 的文件中声明
public interface Contents {
^
TestGoods.java:4: 类 Destination 是公共的,应在名为 Destination.java 的文件中声

public interface Destination {
^
TestGoods.java:7: 类 Goods 是公共的,应在名为 Goods.java 的文件中声明
public class Goods {
^
3 错误

这个该怎么解决了? 一个文件中只能有一个public类吧。例子中怎么不是有main那一个class是public的
...全文
131 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
测试一下 2013-09-11
  • 打赏
  • 举报
回复
引用 3 楼 wang171838 的回复:
你现在把这几个类放在一个java文件中,那它只能有一个public类,给了Out,就不能给test, 这你应该知道的.而要运行main这个主方法,必须是要在publc类里, 你现在Test是默认的权限,这就运行不起来了.
意思是原博文作者没注意到或者说随便写的了
测试一下 2013-09-11
  • 打赏
  • 举报
回复
引用 1 楼 wgx13145188 的回复:
class Outer { 
        private int i = 10; 
        private int y = 8; 
 
        Outer() { 
                System.out.println("调用Outer构造方法:outer"); 
        } 
 
        public void sayMsg() { 
                System.out.println("Outer class!"); 
        } 
 
        class Inner { 
                int i = 1000; 
 
                Inner() { 
                        System.out.println("调用Inner构造方法:inner"); 
                } 
 
                void innerMsg() { 
                        System.out.println(">>>>>Inner class!"); 
                        sayMsg(); 
                        //访问内部类自己的成员i,也可以写成 this.i++ 
                        this.i++; 
                        //访问外部类的成员 i和y 
                        Outer.this.i++; 
                        y--; 
                } 
 
                int getI() { 
                        return i; 
                } 
        } 
 
        public void test() { 
                Inner in = new Inner(); 
                in.innerMsg(); 
        } 
 
        public int getI() { 
                return i; 
        } 
 
        public void setI(int i) { 
                this.i = i; 
        } 
} 
 
public class Test1 { 
	public static void main(String[] args) { 
		Outer outer = new Outer(); 
		outer.test(); 
		System.out.println(outer.getI()); 
		System.out.println("-------1--------"); 

		Outer.Inner iner = outer.new Inner(); 
		iner.innerMsg(); 
		System.out.println(iner.getI()); 
		System.out.println("-------2--------"); 

		System.out.println(outer.getI()); 
	} 
}
这是一个基本点,在一个文件中如果有几个类文件的时候,只有main方法的的类才能用public修饰。
那么意思是原博文作者随便写没注意这点了是吧
笑莫问 2013-09-10
  • 打赏
  • 举报
回复
一个文件只能有一个public类
浪漫江湖 2013-09-10
  • 打赏
  • 举报
回复
class Outer { 
        private int i = 10; 
        private int y = 8; 
 
        Outer() { 
                System.out.println("调用Outer构造方法:outer"); 
        } 
 
        public void sayMsg() { 
                System.out.println("Outer class!"); 
        } 
 
        class Inner { 
                int i = 1000; 
 
                Inner() { 
                        System.out.println("调用Inner构造方法:inner"); 
                } 
 
                void innerMsg() { 
                        System.out.println(">>>>>Inner class!"); 
                        sayMsg(); 
                        //访问内部类自己的成员i,也可以写成 this.i++ 
                        this.i++; 
                        //访问外部类的成员 i和y 
                        Outer.this.i++; 
                        y--; 
                } 
 
                int getI() { 
                        return i; 
                } 
        } 
 
        public void test() { 
                Inner in = new Inner(); 
                in.innerMsg(); 
        } 
 
        public int getI() { 
                return i; 
        } 
 
        public void setI(int i) { 
                this.i = i; 
        } 
} 
 
public class Test1 { 
	public static void main(String[] args) { 
		Outer outer = new Outer(); 
		outer.test(); 
		System.out.println(outer.getI()); 
		System.out.println("-------1--------"); 

		Outer.Inner iner = outer.new Inner(); 
		iner.innerMsg(); 
		System.out.println(iner.getI()); 
		System.out.println("-------2--------"); 

		System.out.println(outer.getI()); 
	} 
}
这是一个基本点,在一个文件中如果有几个类文件的时候,只有main方法的的类才能用public修饰。
尐尐橙 2013-09-10
  • 打赏
  • 举报
回复
引用 3 楼 wang171838 的回复:
你现在把这几个类放在一个java文件中,那它只能有一个public类,给了Out,就不能给test, 这你应该知道的.而要运行main这个主方法,必须是要在publc类里, 你现在Test是默认的权限,这就运行不起来了.
+1
枫醉秋 2013-09-10
  • 打赏
  • 举报
回复
引用 3 楼 wang171838 的回复:
你现在把这几个类放在一个java文件中,那它只能有一个public类,给了Out,就不能给test, 这你应该知道的.而要运行main这个主方法,必须是要在publc类里, 你现在Test是默认的权限,这就运行不起来了.
+1
wang171838 2013-09-10
  • 打赏
  • 举报
回复
你现在把这几个类放在一个java文件中,那它只能有一个public类,给了Out,就不能给test, 这你应该知道的.而要运行main这个主方法,必须是要在publc类里, 你现在Test是默认的权限,这就运行不起来了.

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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