class Outer // new Outer.Inner.x
{
int x = 100;
static class Inner
{
staticint x = 200;
publicvoidprint()
{ //Outer.this.x
System.out.println("Inner...." + x );
}
}
//访问内部类方式1 : 在外部类提供一个方法创建内部类的对象进行访问。publicvoidinstance()
{
Inner ee = new Inner();
ee.print();
System.out.println("Inner....");
}
}
class Demo2
{
publicstaticvoidmain(String[] args)
{
System.out.println(Outer.Inner.x);
/*
Outer ww = new Outer();
ww.instance();
*///访问内部类方式2: 在其它类中直接访问。 格式: 外部类.内部类 变量名 = new 外部类().new 内部类()/*
Outer.Inner inner = new Outer().new Inner();
inner.print();
*///静态内部类的访问方式:
Outer.Inner inner = new Outer.Inner();
inner.print();
}
}
局部内部类
定义:
在一个类的方法内部定义另外一个类。
访问方式:
方式一:在外部类提供一个方法创建内部类的对象进行访问。
使用注意:
1.如果局部内部类访问一个局部变量时,那么该局部变量必须用final 修饰。
样例代码:
class Outer
{
int y = 10;
publicvoidtest()
{
final int x = 200;
class Inner
{
publicvoidprint()
{
System.out.println("内部类" + x); // 此时的x为局部变量x 的复制品
}
}
Inner dd = new Inner();
dd.print();
}
}
class Demo2
{
publicstaticvoidmain(String[] args)
{
//System.out.println(Outer.Inner.x);
Outer ss = new Outer();
ss.test();
}
}
匿名内部类:
使用前提:
必须存在继承和实现关系。
样例代码:
abstract class Animal
{
publicabstract Animal run();
publicabstractvoidsleep();
}
class Outer
{
/*
public void print()
{
class Dog extends Animal // 局部内部类
{
public void run()
{
System.out.println("狗在跑。。。。。");
}
}
Dog dd = new Dog();
dd.run();
}
*///匿名内部类publicvoidprint(){
Animal a = new Animal(){ //多态的形式//匿名内部类与Animal是继承关系,//匿名内部类成员public Animal run()
{
System.out.println("狗在跑。。。。。");
returnthis;
}
publicvoidsleep()
{
System.out.println("狗在睡觉睡觉。。。。。");
}
publicvoidbite()
{
System.out.println("狗在摇啊摇。。。。。");
}
};
a.run().bite();
a.sleep();
}
}
class Demo1
{
publicstaticvoidmain(String[] args)
{
Outer ss = new Outer();
ss.print();
}
}
**************************************
interface Dao
{
publicabstractvoidrun();
}
/*class Outer
{
public void print()
{
new Dao(){
public void run()
{
System.out.println("再吃再吃");
}
}.run();
}
}
*/
class Demo3
{
publicstaticvoidmain(String[] args)
{
//Outer aa = new Outer();
test(new Dao()
{
publicvoidrun()
{
System.out.println("再吃再吃.....");
}
}
);
}
publicstaticvoidtest(Dao s)
{
s.run();
}
}