Java——匿名内部类


/*

 * 匿名内部类,  就是内部类的简写形式。

 * 

 *  必须有前提:

 *  内部类必须继承或者实现一个外部类或者接口。

 * 匿名内部类其实就是一个子类对象。

 * 

 * 格式:new 父类or接口名 {}

 */

interface Inter

{

void show1();

void show2();

}


class Outer1

{

public void method()

{

/*

 * 通常的使用场景之一:

 *  当函数参数是接口类型时,而且接口中的方法不超过3个

 *  可以使用匿名内部类作为实际参数进行传递。

 */

Inter inter = new Inter()

{

@Override

public void show1()

{

// TODO Auto-generated method stub

System.out.println("实现show1()");

}

@Override

public void show2()

{

// TODO Auto-generated method stub

System.out.println("实现show2()");

}

};

/*

 * 编译看左边

 * 运行看右边

 */

inter.show1();

inter.show2();

    }

}


class Outer2

{

public void show3(Inter inter)

{

inter.show1();

inter.show2();

}

//调用show3()函数时   向里边传递一个匿名内部类     就是  不想再去定义一个类 然后 去继承这个借口

public void show4()

{

show3

new Inter()

{

@Override

public void show1()

{

// TODO Auto-generated method stub

}

@Override

public void show2()

{

// TODO Auto-generated method stub

}

}

    );

    }

}


//注意事项***********************************

class Outer3

{

    void method() 

{

Object obj = new Object()

{

public void show()

{

    System.out.println("内部类的函数");

}

};

obj.show();//错误使用       ----------以为匿名内部类这个子类对象被转成为了Object类型

//这样就不能在使用子类特有的 方法了。

}

}


练习题目 

### Java匿名内部类的用法和特性 #### 创建方式与基本概念 在Java中,匿名内部类是指一种没有名称的内部类,在创建对象的同时定义该类。这种机制允许程序员快速实现接口或扩展抽象类而不必事先声明完整的类[^3]。 #### 特性概述 - **无显式名字**:由于其特殊性质,此类无法被直接引用。 - **单次使用**:适合仅需一次性使用的场合。 - **简化编码**:减少了不必要的命名负担,使代码更加简洁紧凑[^1]。 #### 实现形式 可以基于已有的类或者接口来构建匿名内部类: ##### 基于已有类的情况 当希望从某个具体类派生新功能而又不想正式定义子类时,可以选择这种方式。下面的例子展示了如何利用匿名内部类继承`Person`抽象类并覆盖其中的方法: ```java abstract class Person { String name; Person(String name) { this.name = name; } abstract void introduce(); } public class Example { public static void main(String[] args) { // 使用匿名内部类继承抽象类并提供构造函数参数 Person person = new Person("John Doe") { @Override void introduce() { System.out.println("Hello, my name is " + name); } }; // 调用匿名内部类的方法 person.introduce(); } } ``` 此段程序会打印出:“Hello, my name is John Doe”。这里的关键在于通过`new Person()`语句不仅实例化了一个新的对象,同时也定义了这个对象所属的独特类型——即所谓的“匿名”内部类[^4]。 ##### 针对接口的情形 对于那些只需要部分成员变量或方法的不同版本而言,采用匿名内部类可以直接针对所需修改的部分进行定制,无需额外建立整个独立的新类文件。比如要让某个组件响应特定事件,则可以通过如下方式轻松达成目的: ```java button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.out.println("Button clicked!"); } }); ``` 上述片段中的`ActionListener`是一个监听器接口;借助于此种模式可以在不增加复杂度的前提下灵活处理各种交互逻辑[^5]。 #### 应用场景分析 - 当需要临时性的行为改变而不需要长期保存相应类型的定义时; - 对象只会在一处地方创建并且立即使用的情况下更为合适; - 减少因频繁创建小型辅助类所带来的维护成本及潜在混乱。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值