匿名内部类:内部类的简化写法
a) 前提:存在一个类或者接口,此处的类可以是具体类也可以是抽象类
b) 格式:new 类名或者接口名(){重写方法}
c) 本质是一个匿名对象:继承了该类或实现该接口的子类的匿名对象,并没有调用对象的方法
Demo1
interface Inter{
public abstract void show1();
public abstract void show2();
public abstract void show3();
}
class Outer{
public void method(){
//方法一:方便连续调用
Inter i=new Inter(){
public void show1(){
System.out.println("show1");
}
public void show2(){
System.out.println("show2");
}
public void show3(){
System.out.println("show3");
}
};
i.show1();
i.show2();
//方法二,调用起来比较麻烦。
new Inter(){
public void show1(){
System.out.println("show1");
}
public void show2(){
System.out.println("show2");
}
public void show3(){
System.out.println("show3");
}
}.show3();
}
}
class Demo{
public static void main(String [] args){
Outer o=new Outer();
o.method();
}
}
Demo2
interface Person{
public abstract void show();
}
class Man implements Person{
public void show(){
System.out.println("多态实现接口");
}
}
class Test{
public void test(Person p){
p.show();
}
}
class Demo1{
public static void main (String [] args){
Test t=new Test();
//方法一,利用多态实现接口
Person p1=new Man();
t.test(p1);
System.out.println("-----------");
//方法二,利用匿名对象类实现接口,安卓里面常用此方法,因为匿名类用完之后内存就可以回收节省内存
//格式一
Person p2=new Person(){
public void show(){
System.out.println("格式一匿名对象实现接口");
}
};
t.test(p2);
System.out.println("-----------");
//格式二
t.test(new Person(){
public void show(){
System.out.println("格式二匿名对象实现接口");
}
}
);
}
}
面试题
/*
按照要求,补齐代码输出HelloWorld
interface Inter{
void show();
}
class Outer{
补齐代码
}
class OuterDemo{
public static void main (String []args){
Outer.method().show();
}
}
*/
interface Inter{
//public abstract
void show();
}
class Outer{
//方法一
/* public static Inter method(){
return new Inter(){
public void show(){
System.out.println("HelloWorld");
}
};
*/
//方法二
public static Inter method(){
Inter i= new Inter(){
public void show(){
System.out.println("HelloWorld");
}
};
return i;
}
}
class OuterDemo{
public static void main (String []args){
Outer.method().show();
//1、通过Outer.method()可以看出method()是Outer中的静态方法。
//2、Outer.method().show()由于调用show()方法可以看出method()方法的返回值是一个对象。
//3、由于接口中有show()方法,所以返回值类型应该是Inter类型对象
}
}
``