匿名内部类:
1,匿名内部类其实就是内部类的简写格式。
2, 定义匿名内部类的前提:
内部类必须是继承一个类或者实现接口。
3,匿名内部类的格式: new 父类或者接口(){定义子类的内容}
4,匿名内部类 就是一个匿名子类对象。对象有点胖。简化书写覆盖方法。
5,匿名内部类中定义方法最好一个或者两个。
---------------------------------------------------------
内部类演化为匿名内部类:
abstract class ADemo{
abstract void show();
}
class Outer1{
int x=3;
/*class Inner extends ADemo{
void show(){
System.out.println("show:"+x);
}
}*/
public void function(){
// new Inner().show();
new ADemo()
{
void show(){
System.out.println("show:"+x);
}
}.show();
}
}
public class InnerTest {
public static void main(String[] args) {
Outer1 out=new Outer1();
out.function();
}
}
--------------------------------------------------------------
class Outer1{
int x=3;
public void function(){
ADemo ad=new ADemo()
{
int num=9;
void show(){
System.out.println("show:"+x+"num="+num);
}
void abc(){
System.out.println("abc");
}
};
ad.show();
//ad.abc(); 编译失败,父类没有
}
}
-----------------------------------------------------------------------
补足代码分析题:
interface Inner{
void method();
}
class Test{
/*static class Inner1 implements Inner{
@Override
public void method() {
System.out.println("Inner1");
}
}*/
//不足代码,通过匿名内部类
public static Inner function() {
return new Inner()
{
public void method()
{
System.out.println("inner");
}
};
}
}
public class InnerTest {
public static void main(String[] args) {
Test.function().method();
//Inner in=Test.function(); 返回的结果为一个对象,方可调用直接调用函数method()。
//in.method();
}
}
------------------------------------------------------------------------
自定义一个function:
public class InnerTest {
/*static class Inn{
void funtion(){
System.out.println("inner");
}
}*/
public static void main(String[] args) {
//new Inn().funtion();
System.out.println("-------------------");
new Object(){
void funtion(){
System.out.println("innertest");
}
}.funtion(); //Object的子类调用。
}
}