标签:简单的 int() 格式 传递 str 技术分享 java sys one
一、什么是匿名内部类
就是内部类的简化写法
前提:存在一个类或者接口(这里的类可以是具体类也可以是抽象类)
格式:new 类名或者接口名(){
重写方法;
}
二、匿名内部类的本质是什么?
是一个继承了该类或者实现了该接口的子类的匿名对象
class Demo1_NoNameInnerClass { public static void main(String[] args) { Outer o = new Outer(); o.method(); } } interface Inter { public void print(); } class Outer { public void method(){ //Inner i = new Inner(); //i.print(); //new Inner().print(); //Inter i = new Inner(); //父类引用指向子类对象 new Inter() { //实现Inter接口 public void print() { //重写抽象方法 System.out.println("print"); } }.print(); } }
三、匿名内部类重写多个方法调用
class Demo2_NoNameInnerClass { public static void main(String[] args) { Outer o = new Outer(); o.method(); } } interface Inter { public void show1(); public void show2(); } //匿名内部类只针对重写一个方法时候使用 class Outer { public void method() { /*new Inter(){ public void show1() { System.out.println("show1"); } public void show2() { System.out.println("show2"); } }.show1(); new Inter(){ public void show1() { System.out.println("show1"); } public void show2() { System.out.println("show2"); } }.show2();*/ 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(); //i.show3(); //匿名内部类是不能向下转型的,因为没有子类类 名 } }
结论:匿名内部类只针对重写一个方法时候使用
四、匿名内部类在开发中的应用
匿名内部类当做参数传递(本质把匿名内部类看做一个对象)
class Test1_NoNameInnerClass { public static void main(String[] args) { //如何调用PersonDemo中的method方法呢? PersonDemo pd = new PersonDemo (); //pd.method(new Student()); pd.method(new Person() { public void show() { System.out.println("show"); } }); } } //这里写抽象类,接口都行 abstract class Person { public abstract void show(); } class PersonDemo { //public void method(Person p) { //Person p = new Student(); //父类引用指向子类对象 /* Person p = new Person(){ public void show() { System.out.println("show"); } }; */ public void method(Person p) { p.show(); } } class Student extends Person { public void show() { System.out.println("show"); } }
简单的说就是new 抽象类/接口,然后重写方法。
五、匿名内部类的面试题
按照要求,补齐代码
class OuterDemo{
public static void main(String[] args){
Outer.method().show();
}
}
interface Inter{
void show();
}
class Outer{
//补齐代码
}
要求在控制台输出“HelloWorld”
分析:
Outer.method(),用类去调用方法说明该类是静态的
Outer.method().show(),说明Outer.method()返回的是一个对象,有show方法的只有Inter
class Test2_NoNameInnerClass { public static void main(String[] args) { //Outer.method().show(); //链式编程,每次调用方法后还能继续调用方法,证明调用方法返回的是对象 Inter i = Outer.method(); i.show(); } } //按照要求,补齐代码 interface Inter { void show(); } class Outer { //补齐代码 public static Inter method() { return new Inter() { public void show() { System.out.println("show"); } }; } } //要求在控制台输出”HelloWorld”
标签:简单的 int() 格式 传递 str 技术分享 java sys one
原文地址:https://www.cnblogs.com/lxc116317/p/9620852.html