2

假设我有 A 类和 B 类。B 类扩展了 A 类。A 类有一种方法。

public class notimportant
 {
    public void one()
    {
    }
 }

public class A extends notimportant
{
    public void one()
    { 
        //assume there is a super class making this call legal which doesnt do anything
        super.one();
        System.out.println("blah");
    } 
}

public class B extends A
{
}

A var1 = 新 B();

如果我调用 'var1.one();' 输出最终会是:

“哗啦啦”“哗啦啦”

因为它在 B 类中创建了 'one()' 的本地副本,然后读取调用 'super()' 的内容,这将其引导至 A 类中的方法 'one()' 或者它只是打印

“废话”

因为它知道直接看A类

编辑:希望现在更清楚了。

4

2 回答 2

1

它将遵循您当前编写的方式:

-> 类的新对象B

->One在这个对象上调用方法

-> 第一行调用超方法,继续执行

-> 之后第二行打印出来

您的代码根本无法编译,您可能需要清除它。是什么阻止你自己测试这个?

这是你描述的新情况。一切仍然按预期工作,您只需添加一个图层。

public class C {
    public void test() {
        System.out.println("Inside C");
    }
}

public class B extends C {
    public void test() {
        super.test();
        System.out.println("Inside B");
    }
}

public class A extends B {
    public static void main(String[] args) {
        A obj = new A();
        obj.test();
    }
}

输出:

Inside C
Inside B
于 2013-08-21T20:18:40.973 回答
1

super表示你的超类——它在编译时被解析。

它并不意味着任何运行时类型的直接父类this

于 2013-08-21T20:19:37.080 回答