我发现了一些类似的帖子,但找不到明确解释这一点的答案。
我已经执行了类的嵌套,即“内部”类存在于“外部”类中,并尝试实例化内部类,这就是我遇到的场景
如果是 C#:
class outside
{
public class inside
{
public void print()
{
System.Console.WriteLine("I am inside");
}
}
}
class Program
{
public static void Main(string[] args)
{
/* here i am trying to instantiate the inner class 'inside' */
outside.inside obj = new outside.inside();
obj.print();
Console.ReadKey();
}
}
Output:
我在里面
所以,上面的工作正常..但是,
如果是 Java:
class outside
{
public class inside
{
public void print()
{
System.out.println("I am inside");
}
}
}
class Demo
{
public static void main(String[] args)
{
/* here i am trying to instantiate the class 'inside' */
outside.inside obj=new outside.inside();
obj.print();
}
}
Output:
Demo.java:16:错误:包含的封闭实例
外部.内部是必需的...
这是 Java 的情况。这个错误是什么?
这是否意味着外部类“outside”无法使用点运算符访问内部类“inside”,因为它不是静态的?如果是这样,那么为什么在 C# 中不会生成编译错误?
问题在于,按照 Java 中声明类的方式,内部类具有对某个对象的隐式引用。instance外层阶级的。因此,错误消息为:“错误:需要包含 Outside.inside 的封闭实例”。这意味着您需要:
Outside out = new Outside();
Outside.Inside in = out.new Inside();
一般来说,这种模式在 Java 中用于这样的情况:如果没有外部类的实例,内部类的实例的存在就没有意义;并注意内部类实例将有权访问外部类实例的所有变量,甚至是私有变量。但一般来说,这样的类一般都是private
.
为了让这种情况消失,你必须创建内部类static
。然后你将能够执行以下操作:
Outside.Inside in = new Outside.Inside();
编辑:完成什么static
在Java中的意思是:static
Java 中的任何内容(变量、类、方法)都可以在类中访问and实例级别。例如,您可以从非静态方法访问静态变量(这也意味着您可以从类的实例调用静态方法!);但静态方法不能访问非静态变量,也不能调用“仅实例”方法等。
此外,“顶级”课程不能static
,因为这没有意义。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)