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