Tag: 内部类

匿名内部类可以扩展吗?

我想创建一个扩展另一个类的匿名内部类。 我想要做的事实上是这样的: for(final e:list){ Callable l = new MyCallable(ev) extends Callable(){ private e;//updated by constructor @Override public V call() throws Exception { if(e != null) return e; else{ //do something heavy } } }; FutureTask f = new FutureTask(l); futureLoadingtask.run(); } } 这可能吗?

为什么允许编译时常量在非静态内部类中变为静态?

假设我们有如下代码。 public class Outer{ class Inner{ public static final String s = “abc”; } static class Nested{ public static final SomeOtherClass instance = new SomeOtherClass(); } } 我理解要实例化非静态内部类的对象,需要外部 类的对象 。 static表示与类相关,为了访问它,不需要实例化对象。 只有在实例化外部类的对象后才能使用非静态内部类。 在其中包含任何静态引用可能没有意义。 我的问题: 非静态内部类可以在没有任何外部类的显式对象的情况下加载吗? 为什么编译时间常量 (字符串文字,因为它们在字符串池和基元类型中以特殊方式处理)允许在非静态内部类中变为静态 ? 编辑:为什么不允许非编译时常量变为静态,我知道它是按照JLS,但只是想知道会出现什么问题,制定这个规则的意图是什么。

带有内部类的newInstance()

我一直在研究一种实例化方法,它允许我将各种类似的类打包到一个外部类中。 然后,我可以通过将该类型的名称传递给构造函数来实例化每个唯一的类类型。 经过大量的研究和错误,这就是我想出的。 我留下了一个错误,以certificate我的问题。 import java.lang.reflect.Constructor; public class NewTest { public static void main(String[] args) { try { Class toRun = Class.forName(“NewTest$” + args[0]); toRun.getConstructor().newInstance(); } catch(Exception ex) { ex.printStackTrace(); System.out.println(ex.getMessage()); } } public NewTest(){} private class one //Does not instantiate { public one() { System.out.println(“Test1”); } } private static class two //Instantiates okay { […]

如何从静态main()方法调用内部类的方法

尝试在Parent类中创建1个接口和2个具体类。 这将使封闭类成为内部类。 public class Test2 { interface A{ public void call(); } class B implements A{ public void call(){ System.out.println(“inside class B”); } } class C extends B implements A{ public void call(){ super.call(); } } public static void main(String[] args) { A a = new C(); a.call(); } } 现在我不确定如何在静态main()方法中创建类C的对象并调用类C的call()方法。 现在我在线上遇到问题: A a = […]

外部类可以访问内部类的成员吗?

内部类是在类中定义的类,内部类可以声明为public,private,protected。 如果内部类定义为private和protected,外层类可以访问内部类的成员吗? 并且内部类可以访问外部类的成员吗?

受保护/公共内部类

有人可以向我解释一下protected / public 内部课程之间的区别是什么? 我知道public内部课程应尽可能避免(如本文所述 )。 但据我所知,使用protected或public修饰符之间没有区别。 看看这个例子: public class Foo1 { public Foo1() { } protected class InnerFoo { public InnerFoo() { super(); } } } … public class Foo2 extends Foo1 { public Foo2() { Foo1.InnerFoo innerFoo = new Foo1.InnerFoo(); } } … public class Bar { public Bar() { Foo1 foo1 = […]

内部类对象如何驻留在内存中?

Outer outer = new Outer(); 在堆上创建Outer类的Object ,并且引用变量指向它。 如果我在写作时就明白了 Outer.Inner inner=outer.new Inner(); Inner类的对象是在堆上创建的, inner点是在它上面创建的。 在堆中,我们有两个独立的对象,它们包含自己的实例变量。 但是如果我写的话 Outer.Inner inner=new Outer().new Inner(); 还有两个Object将在堆上创建一个用于Outer ,另一个用于Inner 。 但是参考inner只有Inner Object’s成员是可访问的。 谁在堆上引用外部Object ? 如果它没有被任何引用引用,那么它应该有资格进行垃圾收集,这会影响inner的使用。

为什么匿名类不能直接实现多个接口? 仅仅因为语法还是有另一个原因?

在那里有一个内部问题,为什么java匿名类不能同时实现和子类? 或者只是因为语法?

c#中的Java内部类

我有以下Java代码: public class A { private int var_a = 666; public A() { B b = new B(); b.method123(); System.out.println(b.var_b); } public class B { private int var_b = 999; public void method123() { System.out.println(A.this.var_a); } } } 产生666和999.现在,我已经尝试在c#中设置类似的代码,但似乎无法实现相同的function。 如果是这种情况,在c#编程时通常如何实现类似的效果?

Java中的内部类 – 非静态变量错误

我还是java的新手,我试图创建一个内部类并在main中调用该方法。 但是有一个编译错误,说“非静态变量 – 这不能从静态上下文中引用” 请帮忙 class Class1{ public static void main(String args []){ Class2 myObject = new Class2(); myObject.newMethod(); } public class Class2{ public void newMethod(){ System.out.println(“Second class”); } } }