标签:
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();//在外部类外创建内部类的对象,法1 19 System.out.println(wn.xx);//在外部类外访问内部类 20 21 wai.nei wn2 = new wai().new nei();//在外部类外创建内部类的对象,法2 22 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(){//法2 11 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 }
匿名内部类(暂理解作,其实可以是继承自父类的一个类,但是整合到一起了,不显示出来了,于是“匿名”了。然后是在主函数中创建的类,所以叫”内部类“???
觉得有点不科学。。。。。但不重要吧。)
创建匿名内部类
http://www.cnblogs.com/nerxious/archive/2013/01/25/2876489.html(补充,匿名内部类所继承的父类不需要是抽象类或接口,正常的也行);
匿名内部类的初始化(利用非静态语句块)
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 }
;
标签:
原文地址:http://www.cnblogs.com/kiwi-bird/p/4468550.html