java - 在什么情况下一个类的方法可以在另一个类的对象上调用?

标签 java oop

我是 Java 的新手,所以我仍在学习使用严格面向对象的语言的规则。今天我想知道如何使用一种方法来处理该方法类之外的对象。是否有可能在任何情况下使用另一个类的方法成功地对对象执行操作?

假设我有一个 anchorPane 对象 (javafx)。尝试在其上调用 Text 类的 setText() 方法是不明智的,因为 anchorPanes 不直接显示文本。

但是,是否存在可能发生这种情况的情况?方法只能影响其类的对象是否总是一条规则?

最佳答案

Is it always a rule that methods can only affect objects of their class?

不是直接的,但是如果您将一个方法标记为 protected ,则该方法只能从同一类的对象和派生类的对象(甚至在其他实例上)调用。另见 https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

此外,您可以将其设为 final,这样就不可能否决该方法(如果您将类设为 final,则没有人可以从您的类派生)。在这种情况下,您得到的正是您所描述的:

//final here disallows to subclass "Sample". This assures that there exists NO subclass that invokes bar().
public final class Sample {


    public void foo() {

        //on same instance
        this.bar();

        //on another instance, but just same class (or subclass of Sample, but not possible because class is final)
        Sample b = new Sample();
        b.bar();
    }

    /*final here prevents that METHOD is overwritten. But class can be overwritten.
     * subclasses are also allowed to invoke bar().
     */
    protected final void bar() {
        //do something here
    }
}

关于java - 在什么情况下一个类的方法可以在另一个类的对象上调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55132304/

相关文章:

java - (Spring Data MongoDB)多对多关系场景

c++ - const 引用字段作为 C++ 类中的只读属性

c# - 当类是内部类时,为什么 C# 允许方法/成员公开

java - 谁能举例说明如何在java中的InvokeAll() Callable方法中使用Generic?

java - 如何在 Java 中将毫秒转换为儒略日数?

java - 在java中显示基于时间的早上,下午,晚上,晚上消息

java - 将 System.out.println 重定向到日志

jQuery $.proxy 范围

c++ - 关于单例

java - java支持编译时多态吗?