2015-4-30
[昨天又可耻地休息了一天,懒劲比较大啊。跟懒劲有直接关系,这几天对幸福的感知也黯淡了,对未来的幸福不是那么渴望了。表现在对亲情和爱情上。
我想生活的本意是积极进取、茁壮生长并时常感激啊。所以要热爱生活啊。心胸要宽阔。加油^O^
Java 内部类(鸡蛋里又有小鸡蛋,这个小鸡蛋同样有蛋清、蛋黄)
(?java中,类可以用哪些修饰符-----public、abstract、final。类的成员变量、成员函数,接口等可以用哪些修饰符。默认情况下是哪种修饰符。为什么)
非静态内部类
创建非静态内部类;
在外部类中访问内部类(先创建一个内部类的对象,再访问其成员);
在外部类外访问内部类(先创建一个外部类的对象,再通过该对象创建一个内部类的对象,再访问其成员(注意是非private的));
在内部类中访问外部类(直接访问);
1 class wai{ 2 int x = 5; 3 class nei{ //创建非静态内部类 4 int xx = 6; 5 void visitX(){ 6 System.out.println(x);//在内部类中访问外部类 7 } 8 } 9 void visitXX(){ //在外部类中访问内部类10 nei n = new nei();11 System.out.println(n.xx);12 }13 }14 15 public class test{16 public static void main(String[] args){17 wai w = new wai();18 wai.nei wn = w.new nei();//在外部类外创建内部类的对象,法119 System.out.println(wn.xx);//在外部类外访问内部类20 21 wai.nei wn2 = new wai().new nei();//在外部类外创建内部类的对象,法222 System.out.println(wn2.xx);//在外部类外访问内部类23 24 w.visitXX();25 wn.visitX();26 }27 }
当在内部类中访问外部类的成员,而内部类的成员与外部类的该成员同名时,直接访问的话,还是访问内部类的成员。
重名时如何去访问外部类中的该成员呢?
1 class wai{ 2 int x = 5; 3 class nei{ 4 int x = 6; 5 void visitWaiX1(){ //法1 6 wai w1 = new wai(); 7 System.out.println(x); 8 System.out.println(w1.x); 9 }10 void visitWaiX2(){ //法211 System.out.println(this.x);12 System.out.println(wai.this.x);13 System.out.println("this="+this);14 System.out.println("wai.this="+wai.this);15 }16 }17 }18 19 public class test{20 public static void main(String[] args){21 wai w = new wai();22 wai.nei wn = w.new nei();23 wn.visitWaiX1();24 wn.visitWaiX2();25 System.out.println("wn="+wn);26 System.out.println("w="+w);27 }28 }
静态内部类
创建静态内部类(使用static修饰即可。另外,外部类是不能用static来修饰的);
在外部类中访问静态内部类(与 非静态内部类 的方法相同);
在外部类外访问静态内部类(与非静态内部类 的方法不同了,静态的,是不依赖与对象的,所以不需要创建外部类对象,而可以直接创建这个静态内部类,当然需要指明是属于哪个外部类的静态内部类);
1 class wai{ 2 static class nei{ //创建静态内部类(使用static修饰即可。另外,外部类是不能用static来修饰的) 3 int xx = 6; 4 } 5 void visitXX(){ 6 nei n = new nei(); 7 System.out.println(n.xx);//在外部类中访问静态内部类(与 非静态内部类 的方法相同) 8 } 9 }10 11 public class test{12 public static void main(String[] args){13 wai.nei wn = new wai.nei();14 System.out.println(wn.xx);15 //在外部类外访问静态内部类(与非静态内部类 的方法不同了,16 //静态的,是不依赖与对象的,所以不需要创建外部类对象,而可以直接创建这个静态内部类,17 //当然需要指明是属于哪个外部类的静态内部类);18 wai w = new wai();19 w.visitXX();20 }21 }
局部内部类(在类的成员函数中定义一个内部类)
创建局部内部类(访问该类必须在该内部类所在的方法中通过创建内部类对象来访问);
在局部内部类中访问外部类的成员变量(直接访问);
在局部内部类中访问外部类的局部变量(需声明为final);
在静态方法中的局部内部类中访问外部类中的成员变量(该成员变量必须是静态成员);
1 class wai{ 2 int x = 5; 3 void visit1(){ 4 final int xx = 6; 5 class nei{ //创建局部内部类 6 void fun(){ 7 System.out.println(x);//在局部内部类中访问外部类的成员变量(直接访问x) 8 System.out.println(xx);//在局部内部类中访问外部类的局部变量(xx需声明为final) 9 }10 }11 nei n = new nei();12 n.fun();13 }14 static int y = 7;15 static void visit2(){16 class nei{17 void fun(){18 System.out.println(y);//在静态方法中的局部内部类中访问外部类中的成员变量(该成员变量必须是静态成员)19 }20 }21 nei n = new nei();22 n.fun();23 }24 }25 26 public class test{27 public static void main(String[] args){28 wai w = new wai();29 w.visit1();30 w.visit2();31 }32 }
匿名内部类(暂理解作,其实可以是继承自父类的一个类,但是整合到一起了,不显示出来了,于是“匿名”了。然后是在主函数中创建的类,所以叫”内部类“???
觉得有点不科学。。。。。但不重要吧。)
创建匿名内部类
(补充,匿名内部类所继承的父类不需要是抽象类或接口,正常的也行);
匿名内部类的初始化(利用非静态语句块)
1 class neiFather{ 2 int x; 3 void output(){ 4 System.out.println("in neiFather"); 5 } 6 } 7 8 public class test{ 9 public static void main(String[] args){10 neiFather nf = new neiFather()11 {12 {13 x = 5;14 }15 void output(){16 System.out.println("x="+x);17 }18 };19 nf.output();20 }21 }
;