我用这个代码没有问题啊(没有用package p1;这个语句)这是结果: **** In same class,you can access ... friendly nmember 1 private member 2 protected member 3 public member 4 **** In subClass of same package,you can access member of this class ... friendly member 1 protected member 3 public member 4 **** In subClass of same package,you can access member of superclass object ... friednly member 1 protected member 3 public member 4 **** In the same package,you can access ... friendly member 1 protected member 3 public member 4
开一下我为解决别人的问题而修改的代码,main()方法哪里都可以有,不一定要是声明为public,但是一个.java文件只能有一个public类(嵌套的不算)用来声明文件同名 * * @(#)TestValuePass.java * * Copyright 2004 cfzq, Inc. All rights reserved. * @author Fane * @version 1.0, 28/10/04 * @since JDK1.4.0 */ class Test { public Test() { } public StringBuffer s[]; public static void main(String args[]) {
Test t = new Test(); t.s = new StringBuffer[4]; t.s[0] = new StringBuffer("1"); t.s[1] = new StringBuffer("2"); t.s[2] = new StringBuffer("3"); t.s[3] = new StringBuffer("4");
t.setArray(); for (int i = 0; i < t.s.length; i++) { System.out.println(t.s[i]); }
t.setArray(t.s[3]); System.out.println("#######################################################"); System.out.println(t.s[3]); for (int i = 0; i < t.s.length; i++) { System.out.println(t.s[i]); }
}
public void setArray() { s[3] = new StringBuffer("5"); }
public void setArray(StringBuffer sb) { //s=null; sb = new StringBuffer("6"); System.out.println("sb="+sb); //传递一个值 /*if(this.sb==sb) System.out.println("this.sb have the same value of sb"); if(this.sb.equals(sb)) System.out.println("this.sb have the same addr with sb"); */ } }class Test1 { public Test1() { }
public StringBuffer s[]; public static void main(String args[]) { Test1 t = new Test1(); t.s = new StringBuffer[4]; t.s[0] = new StringBuffer("1"); t.s[1] = new StringBuffer("2"); t.s[2] = new StringBuffer("3"); t.s[3] = new StringBuffer("4");
t.setArray(); for (int i = 0; i < t.s.length; i++) { System.out.println(t.s[i]); }
t.setArray(t.s); System.out.println("#######################################################"); System.out.println(t.s[3]); for (int i = 0; i < t.s.length; i++) { System.out.println(t.s[i]); }
}
public void setArray() { s[3] = new StringBuffer("5"); }
public void setArray(StringBuffer sb[]) { //s=null; sb[3] = new StringBuffer("6"); //传递一个地址 System.out.println("sb="+sb); } }
mian()被声明为static,是一个静态的方法,可以理解为她不属于任何一个类
//AccessControl.javapackage p1; class Original{ int n_friendly=1; private int n_private=2; protected int n_protected=3; public int n_public=4; void Access(){ System.out.println("**** In same class,you can access ..."); System.out.println("friendly nmember "+n_friendly); System.out.println("private member "+n_private); System.out.println("protected member "+n_protected); System.out.println("public member "+n_public); } } class Derived extends Original{ void Access(){ System.out.println("**** In subClass of same package,you can access member of this class ..."); System.out.println("friendly member "+n_friendly); System.out.println("protected member "+n_protected); System.out.println("public member "+n_public); Original o=new Original(); System.out.println("**** In subClass of same package,you can access member of superclass object ..."); System.out.println("friednly member "+o.n_friendly); System.out.println("protected member "+o.n_protected); System.out.println("public member "+o.n_public); } } class SamePackage{ void Access(){ Original o=new Original(); System.out.println("**** In the same package,you can access ..."); System.out.println("friendly member "+o.n_friendly); System.out.println("protected member "+o.n_protected); System.out.println("public member "+o.n_public); } }public class AccessControl{ public static void main(String args[]){ Original o=new Original(); o.Access(); Derived d=new Derived(); d.Access(); SamePackage s=new SamePackage(); s.Access(); } }
小弟发表一下拙见,不对之处还请批评!
在一个.java文件中可以含有多个public class?
能给个例子吗?我记得只能有一个public class
还有主类不加public也可以成功编译啊
难道我理解错了,请教
**** In same class,you can access ...
friendly nmember 1
private member 2
protected member 3
public member 4
**** In subClass of same package,you can access member of this class ...
friendly member 1
protected member 3
public member 4
**** In subClass of same package,you can access member of superclass object ...
friednly member 1
protected member 3
public member 4
**** In the same package,you can access ...
friendly member 1
protected member 3
public member 4
*
* @(#)TestValuePass.java
*
* Copyright 2004 cfzq, Inc. All rights reserved.
* @author Fane
* @version 1.0, 28/10/04
* @since JDK1.4.0
*/
class Test
{
public Test()
{
} public StringBuffer s[];
public static void main(String args[])
{
Test t = new Test();
t.s = new StringBuffer[4];
t.s[0] = new StringBuffer("1");
t.s[1] = new StringBuffer("2");
t.s[2] = new StringBuffer("3");
t.s[3] = new StringBuffer("4");
t.setArray();
for (int i = 0; i < t.s.length; i++)
{
System.out.println(t.s[i]);
}
t.setArray(t.s[3]);
System.out.println("#######################################################");
System.out.println(t.s[3]);
for (int i = 0; i < t.s.length; i++)
{
System.out.println(t.s[i]);
}
}
public void setArray()
{
s[3] = new StringBuffer("5");
}
public void setArray(StringBuffer sb)
{
//s=null;
sb = new StringBuffer("6");
System.out.println("sb="+sb);
//传递一个值
/*if(this.sb==sb)
System.out.println("this.sb have the same value of sb");
if(this.sb.equals(sb))
System.out.println("this.sb have the same addr with sb");
*/
}
}class Test1
{
public Test1()
{
}
public StringBuffer s[];
public static void main(String args[])
{
Test1 t = new Test1();
t.s = new StringBuffer[4];
t.s[0] = new StringBuffer("1");
t.s[1] = new StringBuffer("2");
t.s[2] = new StringBuffer("3");
t.s[3] = new StringBuffer("4");
t.setArray();
for (int i = 0; i < t.s.length; i++)
{
System.out.println(t.s[i]);
}
t.setArray(t.s);
System.out.println("#######################################################");
System.out.println(t.s[3]);
for (int i = 0; i < t.s.length; i++)
{
System.out.println(t.s[i]);
}
}
public void setArray()
{
s[3] = new StringBuffer("5");
}
public void setArray(StringBuffer sb[])
{
//s=null;
sb[3] = new StringBuffer("6");
//传递一个地址
System.out.println("sb="+sb);
}
}
//AccessControl.javapackage p1;
class Original{
int n_friendly=1;
private int n_private=2;
protected int n_protected=3;
public int n_public=4;
void Access(){
System.out.println("**** In same class,you can access ...");
System.out.println("friendly nmember "+n_friendly);
System.out.println("private member "+n_private);
System.out.println("protected member "+n_protected);
System.out.println("public member "+n_public);
}
}
class Derived extends Original{
void Access(){
System.out.println("**** In subClass of same package,you can access member of this class ...");
System.out.println("friendly member "+n_friendly);
System.out.println("protected member "+n_protected);
System.out.println("public member "+n_public);
Original o=new Original();
System.out.println("**** In subClass of same package,you can access member of superclass object ...");
System.out.println("friednly member "+o.n_friendly);
System.out.println("protected member "+o.n_protected);
System.out.println("public member "+o.n_public);
}
}
class SamePackage{
void Access(){
Original o=new Original();
System.out.println("**** In the same package,you can access ...");
System.out.println("friendly member "+o.n_friendly);
System.out.println("protected member "+o.n_protected);
System.out.println("public member "+o.n_public);
}
}public class AccessControl{
public static void main(String args[]){
Original o=new Original();
o.Access();
Derived d=new Derived();
d.Access();
SamePackage s=new SamePackage();
s.Access();
}
}
现在我搞清了几个基本概念:
一段程序中只能有一个public类,而且文件名必须与这个public类同名!书上的范例,在后面还构建了一个package p2,然后里面一个类要继承Original这个类!我想这个问题可能这样解决比较好,就是把Original这个public类单独再写在一个文件里面!然后,这个AccessControl类继承他就是了,而不能再一个文件中!
您认为我这样理解对吗?
main()方法声明为static,称之为类方法,主类在执行的时候没有实例,可以从类方法作为程序执行的入口~
小弟发表一下拙见,不对之处还请批评!______________________________________________________________________今天回头去看自己编译过的程序,一个文件都是一个public类的!
由于回答问题的时候只是想当然!犯下如此低级的错误实在该罚!以后小弟有不对的地方还要大家批评指正呀!