方法 匿名内部类 java_java语言中匿名内部类的方法

基本理论:

关于java内部类:一个内部类的定义是定义在另一个类内部的类。

e0800d283145d59e901818df7675caeb.png

而原因有4点:

1.一个内部类的对象能够访问创建它的对象的实现,包括私有数据。即内部类实例对包含它的哪个类的实例来说,是特权的。

2.对于同一个包中的其他类来说,内部类能够隐藏起来,换句话说,内部类不管方法的可见性如何,那怕是public,除了包容类,其他类都无法使用它。

3.使用内部类可以非常方便的编写事件驱动程序。

4.匿名内部类可以很方便的定义回调。

其实它真正的目的仅仅为了定义回调--进一步就是事件驱动。

回调和接口:编程一个常用的模式是回调模式,在这种模式中你可以指定当一个特定时间发生时回调对象上的方法。

注意事项:

匿名类和内部类中的中的this :

有时候,我们会用到一些匿名类和内部类。当在匿名类中用this时,这个this则指的是匿名类或内部类本身。

这时如果我们要使用外部类的方法和变量的话,则应该加上外部类的类名。如下面这个例子:

public class A {

int i = 1;

public A() {

Thread thread = new Thread() {

public void run() {

for(;;) {

A.this.run();

try {

sleep(1000);

}catch(InterruptedException ie)

thread.start();

public void run() {

System.out.println("i = " + i);

i++;

public static void main(String[] args) throws Exception {

new A();

在上面这个例子中, thread 是一个匿名类对象,在它的定义中,它的 run 函数里用到了外部类的 run 函数。

这时由于函数同名,直接调用就不行了。这时有两种办法,一种就是把外部的 run 函数换一个名字,但这种办法对于一个开发到中途的应用来说是不可取的。那么就可以用这个例子中的办法用外部类的类名加上 this 引用来说明要调用的是外部类的方法 run。

对于这个例子:

this.test(new Inner(){

public void method1(){

System.out.print("1111");

这个时候调用test()方法,那Inner类的method1和method2是什么时候被调用的?难道也是this对象向他们发消息(比如传入一个参数)吗?还是直接显式的调用??

对于Inner类,除了this这个类,就是this.test(...那句中的this,它能够调用Inner类的方法,其他地方都不行,然而,这也需要你在类中有个地方保存有对这个内部类实例的引用才可以。再说明一次,内部类是用来在某个时刻调用外面的方法而存在的--这就是回调。

为了说明内部类实例的方法只能在包容类的实例中调用,其他地方无法调用,给个例子如下:

JAVA2实用教程源码:

/** 一个应用程序,用来演示内部类的使用 */

/** 类Outer */

class Outer{

private static int size;

public class Inner{

private int size;

public void doStuff(int size){

size++; //存取局部变量

this.size++; //存取其内部类的成员变量

Outer.this.size++; //存取其外部类的成员变量

System.out.println(size+" "+this.size+" "+Outer.this.size);

}

public static void main(String[] a){

Outer o=new Outer();

o.testInner();

}

public void testInner(){

Inner i=new Inner();

i.doStuff(5);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 Java ,可以使用匿名内部类来定义一个类,而不需要给它命名。匿名内部类常用于创建一个只使用一次的类,例如在主方法。 以下是在主方法编写匿名内部类的一个示例: ``` public static void main(String[] args) { // 创建并实例化匿名内部类 new Thread(new Runnable() { @Override public void run() { System.out.println("在匿名内部执行线程任务"); } }).start(); } ``` 在上面的代码,我们在主方法创建了一个新的 `Thread` 对象,并在构造函数传入了一个实现了 `Runnable` 接口的匿名内部类。该匿名内部类定义了一个 `run` 方法,该方法将在线程启动时被调用。 ### 回答2: 在主方法编写一个匿名内部类,可以通过创建一个类的实例并重写其方法来实现。 首先,在主方法创建一个接口或抽象类的实例,并重写其方法。例如,我们创建一个Runnable接口的匿名内部类: ```java public class Main { public static void main(String[] args) { Runnable anonymousRunnable = new Runnable() { @Override public void run() { System.out.println("Hello, anonymous inner class!"); } }; anonymousRunnable.run(); } } ``` 在上面的例子,在主方法创建了一个Runnable接口的匿名内部类anonymousRunnable,并重写了run()方法。在run()方法打印了一条简单的信息。 然后,我们可以调用匿名内部类的方法。在上面的例子,我们通过调用anonymousRunnable的run()方法来执行匿名内部的逻辑。 通过以上步骤,我们就在主方法成功地编写了一个匿名内部类。使用匿名内部类可以方便地创建一个临时的实现类,更加简化代码的编写过程。 ### 回答3: 在Java,可以在主方法编写一个匿名内部类的步骤如下: 首先,在主方法定义一个接口或者抽象类。例如,我们定义一个接口HelloInterface,其包含一个抽象方法sayHello()。 接着,我们可以通过匿名内部类来实现这个接口并覆写其方法。在主方法使用下面的语法来创建一个匿名内部类的对象: HelloInterface obj = new HelloInterface() { @Override public void sayHello() { System.out.println("匿名内部类:Hello World!"); } }; 在上述代码,我们通过new关键字来创建一个匿名内部类的对象,并同时实现HelloInterface接口并覆写了其抽象方法sayHello()。在匿名内部,我们可以编写具体的实现内容,例如打印输出"匿名内部类:Hello World!"。 最后,在主方法通过调用该对象的方法来执行匿名内部的代码,比如调用obj.sayHello()。 总结起来,主方法编写一个匿名内部类的步骤为:定义接口或抽象类 -> 创建匿名内部类对象并实现接口或覆写抽象类的方法 -> 调用匿名内部类对象的方法执行相关代码。 注意:匿名内部类只能在创建的时候使用,无法再其他地方引用。并且在匿名内部无法定义构造方法,因为匿名内部类没有名字,无法被显式地调用构造方法

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值