Java如何在main方法中实例化内部类对象

今天我在实例化一个类是编译器报以下错误:

No enclosing instance of type Person is accessible. Must qualify the allocation with an enclosing instance of type Person (e.g. x.new A() where x is an instance of Person).

 后来才反应 Java中

不能直接创建实例化内部类对象

百度后得到以下结论:

1:非静态内部类,必须有一个外部类的引用才能创建。

2:在外部类的非静态方法中,因为有隐含的外部类引用this,所以可以直接创建非静态内部类。

3:在外部类的静态方法中,因为没有this,所以必须先获得外部类引用,然后创建非静态内部类。

4:静态内部类,不需要外部类引用就可以直接创建。

5:同时静态的内部类,也不能直接访问外部类的非静态方法。

6:由此可以推测,非静态内部类之所以可以直接访问外部类的方法,是因为创建非静态内部类时,有一个隐含的外部类引用被传递进来。

看到第一个 非静态内部类,必须有一个外部类的引用才能创建。

我想到了不能直接new 于是我这样

Man man = new Person().new Man();

这样成功了

 

 

 

 

 

 

 

  • 16
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
### 回答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()。 总结起来,主方法编写一个匿名内部类的步骤为:定义接口或抽象类 -> 创建匿名内部类对象并实现接口或覆写抽象类的方法 -> 调用匿名内部类对象的方法执行相关代码。 注意:匿名内部类只能在创建的时候使用,无法再其他地方引用。并且在匿名内部类无法定义构造方法,因为匿名内部类没有名字,无法被显式地调用构造方法

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值