【发布时间】:2016-12-24 16:02:42
【问题描述】:
我应该提一下,在我想问这个问题之后,我已经弄清楚了具体的编程问题,所以这不是一个编程问题,而是一个关于问题背后原因的问题。
我一直在测试 Java 在使用访问修饰符时的局限性,并开始将这些测试应用于基本的继承概念。
代码如下:
package test.Inheritance;
public class SuperClass {
private static int x = 0;
protected static int y = 1;
public static void main(String[] args){
SupplementalClass2 child = new SupplementalClass2();
NestedClass local = new NestedClass();
InnerClass test;
child.setObject(child.new InnerClass(){
@Override public void display(){System.out.println("Hey!");}
});
test = child.getObject();
System.out.println(test.equals(child.receiveObject));
SuperClass.NestedClass.display();
SuperClass.NestedClass2.display();
test.display();
child.display();
local.message();
}
public static class NestedClass {
public static void display()
{
System.out.println("x before first static context change: " + x);
x = 25;
System.out.println("x after first static context change: " + x);
}
public void message()
{
System.out.print("Nested Class Field Access Test: " + "before(" + y + ") | ");
y = 20;
System.out.println("after(" + y + ")");
}
}
public static class NestedClass2 {
public static void display()
{
System.out.println("x before second static context change: " + x);
x = 30;
System.out.println("x after second static context change: " + x);
}
}
public class InnerClass {
public void display(){}
}
}
abstract class SupplementalClass extends SuperClass {
protected String test = "Parent Class String";
protected InnerClass receiveObject;
}
interface SupplementalInterface {
public static final int test = 3;
public abstract void display();
}
class SupplementalClass2 extends SupplementalClass implements SupplementalInterface {
public void display()
{
System.out.println("Supplemental Interface Field Access Test: " + SupplementalInterface.test);
System.out.println("Supplemental Parent Field Access Test: " + super.test);
}
public void setObject(InnerClass in){
receiveObject = in;
}
public InnerClass getObject()
{
return receiveObject;
}
}
这是固定版本:InnerClass 被赋予一个方法 display() 来覆盖 SupplementalClass2 中的方法。
之前InnerClass是空的,我试图在匿名类实例中设置显示方法,而不是类本身,因为我相信内部类会继承通过SupplementalInterface实现的抽象显示方法。
所以我的问题是,如果不通过继承,嵌套类和内部类如何访问其持有者中的数据?
【问题讨论】:
标签: java inheritance anonymous anonymous-class