1,定义
匿名内部类其实是内部类的简写格式;
2,定义匿名内部类的前提
内部类必须要继承一个类或者实现接口,但最多只能继承一个父类或者实现一个接口;
3,定义格式:
4,匿名内部类就是一个带有内容的匿名子类对象。
5,匿名内部类使用规则:
a,匿名内部类不能是抽象类;
b,匿名内部类不能定义构造器,但可以定义初始块。
具体代码实例如下:
- interface Inter
- {
- public abstract void method();
- }
- class Test
- {
- //知识点一、匿名内部类的使用之---补全代码
- //第三步,根据得出结论,将该方法的定义写出来
- public static Inter function()
- {
- /*
- 第四步,需要return一个Inter类型的对象;
- 而通过观察,Inter中只有一个方法method(),故可以考虑使用匿名内部类来实现
- */
- return new Inter()
- {
- public void method()
- {
- System.out.println("the result is here!!!!");
- }
- };
- }
- }
- public class myAnonymousInnerClass
- {
- public static void main(String[] args)
- {
- /*
- 第一步,通过观察代码,发现该语句直接调用Test类中的function()方法;
- 因此,该function()应该数据类方法。需要使用static修饰
- 第二步,经过该function()方法,最后又调用method()方法。只有Inter类型才能调用该方法。
- 因此,该function()方法应该返回一个Inter类型的对象。
- 故function()方法的定义格式已经出来了:public static Inter function();
- */
- Test.function().method();
-
-
- //知识点二、匿名内部类做为参数的使用
- show(new Inter()
- {
- public void method()
- {
- System.out.println("show方法调用了一个匿名内部类!");
- }
- });//这里是内部类的一个易错点。此时如果成对打符号的话,则应该不会该问题。
-
- //知识点三、如果没有接口等其他的东西,就想通过一个匿名内部类实现sayHello方法
- new Object()//Object类是所有类的基类或者叫父类。
- {
- public void sayHello()
- {
- System.out.println("I am here to say hello!");
- }
- }.sayHello();
-
-
- }
-
- public static void show(Inter in)
- {
- in.method();
- }
- }
复制代码 |
|