【问题标题】:@Override on my own methods?@Override 我自己的方法?
【发布时间】:2011-07-07 13:31:19
【问题描述】:

我有一个类似于您在下面看到的设置。我刚刚注意到“YourClass”实际上是在“MyClass”中实现我的一些逻辑。啊。我试图在“YourClass”中的 setupViews() 上方抛出一个 @Override,但它不会编译说明,“DataManagerActivity 类型的方法 setupViews() 必须覆盖超类方法”

代码已更改。这是一个例子。我只是输入了错误的东西。同样的问题。如何让扩展 MyClass 的 YourClass 不从 MyClass 实现 setupViews()?

public class MyClass extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);

        setupViews();
        ...

    }

    private void setupViews() {

        ....

    }
}



public class YourClass extends MyClass {

    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);

        setupViews();
        ...

    }

    private void setupViews() {

        ....

    }
}

【问题讨论】:

    标签: android class methods overriding super


    【解决方案1】:

    @Override 指示编译器失败,除非它下面的方法覆盖超类中的方法(您 extend 来自的那个)或其实现的 interfaces 之一。

    编辑:对不起,我可能误解了你的意思。您不能覆盖 setupViews() 的原因是它在 MyClass 中是 private,因此您无法从任何子类访问或覆盖它。

    如果这是您想要的,那么您希望您的方法是 protected - 就像在它所定义的类的子类中可访问和可覆盖,但不能从外部访问。

    编辑 2':所以底线:

    如果您希望setupViews() 在子类中可被覆盖(例如YourClass),请将其设为protected。否则,设为private

    【讨论】:

    • 也是这样,但他提到的错误实际上是覆盖private setupViews() :)
    • 很高兴我能帮上忙。那接受? :)
    • 感谢您的帮助。麻烦的是它在两者中都是“私有的”。但是 MyClass 中的 if (true) { Toast.maketoast } 逻辑会显示在 MyClass 和 YourClass 中。 YourClass 中既不存在逻辑,也不存在美味的吐司。 /me = 困惑。
    • 我不在乎它是否可覆盖,但我绝对不希望它在我的子类中实现它的东西 :)
    • @Dan 受保护的方法也可以被同一个包中的类访问。
    【解决方案2】:

    我想你想使用 this.setupViews();

    【讨论】:

    • 谢谢谢谢谢谢!无论我试图把@Override 放在哪里,它都告诉我必须重写一个超类方法。我无法让“YourClass”停止实施“MyClass”setupViews()。这非常有效!
    猜你喜欢
    • 1970-01-01
    • 2014-11-26
    • 1970-01-01
    • 1970-01-01
    • 2011-04-23
    • 2011-09-09
    • 1970-01-01
    • 2015-11-25
    • 1970-01-01
    相关资源
    最近更新 更多