你既然是用private修饰符,就是希望声明的成员变量不被外部的类访问,而实现封装,那就要写相应的get和set方法来实现对成员变量的修改和访问!不然的话,你用public修饰,就应该不会报错了,如果还报错,就加上static关键字!应该就ok了!
一 对于外部类来说 内部类相当于它的一个属性 内部类中的private也相当于它本身的private属性 所以根据类内可见原则 内部类private是可以被外部类访问的
二 你在主方法中直接new一个自身类 相当于是在声明一个新的类 用这个新类去调用它的私有 你说是啥后果 对于jmv来说这就是典型的调用权限失败
new Out().a会报错在于private的意义就是隐藏一切信息,可以通过get方法读取。
外部类中通过new Inner().data?内部类可以访问全局变量和方法中的final修饰的变量,现有外部类再有内部类,外部类如何方位内部类中的参数??
import java.util.* ;
public class InnerTest{
private static int index = 1 ;
private final int id = index++ ;
public final String name = "name" + (index-1) ;
public int getId(){
return this.id ;
}
public String getName(){
return this.name;
}
private class A{
public void print(){
System.out.print(" InnerTest id = " + id);
System.out.println(" name = " + InnerTest.this.name);
}
public InnerTest getInnerTest(){
return InnerTest.this;
}
}
public A ab = new A();
public void print(){
//A a = new A();
ab.print();
}
public InnerTest getObject(){
//A a = new A();
return ab.getInnerTest();
}
private InnerTest(String s){
}
public static InnerTest getInstance(){
return new InnerTest(null);
}
private class MyArrayList extends ArrayList{
public boolean add(Object obj){
System.out.println("+");
return super.add(obj);
}
}
public List getMyList(){
return new MyArrayList();
}
public static void main(String [] args){
InnerTest it = InnerTest.getInstance();
it.print();
//System.out.println(" id = " + it.getObject().getId() +
//" name = " + it.getObject().getName());
List l = it.getMyList();
l.add("89");
for(int i=0;i
}
}
}