永发信息网

java主函数访问主函数所在类的内部类的问题

答案:2  悬赏:70  手机版
解决时间 2021-01-27 08:50
  • 提问者网友:几叶到寒
  • 2021-01-27 00:51
新人初学java,有个地方非常不解,希望大神们不吝赐教,拜托啦……(^人^)

问题描述如下:
先给一段代码吧
class Outer{}
class A
{
class Inner1{}
static class Inner2{}
public static void main()
{
new Outer();//这句编译成功 ————(1)
new Inner();//这句编译失败————(2)
new Inner2();//这句编译成功————(3)
}
}
那么问题来了,关于(1)(2)(3),大神们都是如何理解的呢?

呃,突然想起来,再补充一点~
在class A中再定义一个函数如下
public void f()
{
new Inner1();//这句编译成功————(4)

}
还有就是(2)那句是new Inner1() 之前少打了个1。。。
最佳答案
  • 五星知识达人网友:神鬼未生
  • 2021-01-27 00:59
首先非静态方法是可以访问和实例化静态和非静态内部类的,所以f()方法编译成功
再者静态方法是不可以访问和实例化非静态内部类的,因为main方法是静态的,所以(2)编译错误

如果内部类是静态(static 修饰),那么内部类中是不能访问外部类非静态属性和方法的,反之则能访问

静态内部类:是可以被独立实例化的,而不依赖外部类实例化,且内部类中可以有静态属性,但是只能访问外部类静态属性

非静态内部类:要实例化必须先实例化外部类,他是依赖于外部类实例的,所以他才能够有资格访问外部类的非静态属性,即使是private属性,但是非静态内部类中是不能有静态属性的

严格来说,内部类就是外部类的一个属性,既然是自己的属性当然就能被其他属性和方法访问,因此应该遵循属性访问的一般规则,即非静态属性或方法可以访问静态和非静态属性,但是静态属性或方法只能访问静态属性,在这里你应该能发现点什么,内部类和其他属性一样,有静态和非静态之分,且静态属性可以不依赖类实例化而使用,而非静态则需要依赖类实例化而初始化。

所以内部类是比较特殊属性但是也符合类的一般属性情况 ,希望能帮助你!
全部回答
  • 1楼网友:从此江山别
  • 2021-01-27 02:00
先看下面程序:(我结合这段代码讲) 首先要弄清楚的是,类 b 和 方法f在编译的时候是在一个层次上 他们使用的资源都是自己的局部变量,或者是成员变量。 现在类b要用方法f的资源,所以必须这个资源是已经存在的,final 的资源是原来定义并初始化的。所以... 我的语文不太好,说的有点乱,如果没看懂在找我... =========================code begin ======================= public class test { int b = 0; final int c = 0; void f(final int a) { class b { void print() { system.out.println(a); system.out.println(b); system.out.println(c); } } } public static void main(string[] args) { } } =======================code end =====================
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯