您的位置:首页 > 其它

匿名内部类

2015-09-24 10:49 239 查看
/*
内部类定义在局部时,
1,不可以被成员修饰符修饰
2,可以直接访问外部类中的成员,因为还持有外部类中的引用。
但是不可以访问它所在的局部中的变量。只能访问被final修饰的局部变量。
*/
class Outer
{
int x = 3;

void method(final int a)
{
final int y = 4;
class Inner
{
void function()
{
System.out.println(y);
}
}

new Inner().function();

}
}

class  InnerClassDemo3
{
public static void main(String[] args)
{
Outer out = new Outer();
out.method(7);
out.method(8);
}

}

/*
内部类:
*/
class Outer
{
int x = 3;
class Inner extends AbsDemo
{
int num = 90;
void show()
{
System.out.println("show :"+num);
}
void abc()
{
System.out.println("hehe");
}
}
public void function()
{
//AbsDemo a = new Inner();
}
}

class InnerClassDemo4
{
public static void main(String[] args)
{
new Outer().function();
}
}

/*
匿名内部类:
1,匿名内部类其实就是内部类的简写格式。
2,定义匿名内部类的前提:
内部类必须是继承一个类或者实现接口。
3,匿名内部类的格式:  new 父类或者接口(){定义子类的内容}

*/
abstract class AbsDemo
{
abstract void show();

}
class Outer
{
int x = 3;

/*
class Inner extends AbsDemo
{
void show()
{
System.out.println("show :"+x);
}
}
*/

public void function()
{
//AbsDemo a = new Inner();

new AbsDemo()
{
int num = 9;
void show()
{
System.out.println("num==="+num);
}
}; //代表匿名子类对象  等同于上俩个注释
}
}
class InnerClassDemo4
{
public static void main(String[] args)
{
new Outer().function();
}
}

/*
4,其实匿名内部类就是一个匿名子类对象。而且这个对象有点胖。  可以理解为带内容的对象。
5,匿名内部类中定义的方法最好不要超过3个。
*/
abstract class AbsDemo
{
abstract void show();
}
class Outer
{
int x = 3;
/*
class Inner extends AbsDemo
{
void show()
{
System.out.println("show :"+x);
}
}
*/

public void function()
{
/*
new AbsDemo()
{
int num = 9;
void show()
{
System.out.println("num==="+num);  //可以打印出,因为这是         个对象,可以定义非final变量
}
}.show();

new AbsDemo()
{
void show()
{
System.out.println("num==="+num);
}
};
*/

/*
new AbsDemo()
{
int num = 9;
void show()
{
System.out.println("num==="+num);
}
void abc(){
System.out.println("num==="+num);
}
}.abc();//道理与上一个注释相同 ,也可以调用show()
new AbsDemo()
{
int num = 9;
void show()
{
System.out.println("num==="+num);
}
void abc(){
System.out.println("num==="+num);
}
}.abc();//也可以调用show()
*/

//AbsDemo a = new Inner();
//      Inner in = new Inner();
//      in.show();
//      in.abc();

AbsDemo d = new AbsDemo()
{
int num = 9;
void show()
{
System.out.println("num==="+num);
}
void abc()
{
System.out.println("haha");
}
};

d.show();
//d.abc();//编译失败;因为父类中没有abc()方法

}
}
class InnerClassDemo4
{
public static void main(String[] args)
{
new Outer().function();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: