Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 类中的方法如何在对象之间共享?_Java_This - Fatal编程技术网

Java 类中的方法如何在对象之间共享?

Java 类中的方法如何在对象之间共享?,java,this,Java,This,目前正在阅读Bruce Eckel的“Java思维”。已达到“此”关键字点。我不清楚对象和“这个”是如何工作的。布鲁斯·埃克尔在他的书中说: 如果有两个类型相同的对象,分别称为a和b,您可能想知道如何为这两个对象调用方法peel(): //: initialization/BananaPeel.java class Banana { void peel(int i) { /* ... */ } } public class BananaPeel { public static vo

目前正在阅读Bruce Eckel的“Java思维”。已达到“”关键字点。我不清楚对象和“这个”是如何工作的。布鲁斯·埃克尔在他的书中说:

如果有两个类型相同的对象,分别称为ab,您可能想知道如何为这两个对象调用方法peel()

//: initialization/BananaPeel.java
class Banana { void peel(int i) { /* ... */ } }  

public class BananaPeel {
    public static void main(String[] args) {
        Banana a = new Banana(),
        b = new Banana();
        a.peel(1);
        b.peel(2);
    }
} ///:~
如果只有一个方法称为peel(),那么该方法如何知道它是为对象a还是b调用的

为了让您能够使用方便的面向对象语法编写代码,即“向对象发送消息”,编译器会为您做一些秘密工作。有一个秘密的第一个参数传递给方法peel(),该参数是对正在操作的对象的引用。因此,这两个方法调用类似于:

Banana.peel(a, 1);  
Banana.peel(b, 2); 
因此,当我们创建一个对象时,它会从类中复制自己的方法

A obj = new A();
obj.callMethod();  //<-- object uses it's own method, not the class, right?
A obj=新的A();

obj.callMethod()// 如果你和我都在有趣的时候笑,你可能会说我们都有笑的能力

我正在考虑以大致相同的方式在类的实例之间共享方法。香蕉有着可以去皮的特性。
Banana
类指定
Banana
对象是什么以及它们可以做什么。有些人将该类描述为用于创建对象的模板或用于标记对象的橡皮戳。所有的香蕉都可以去皮,但程序员仍然决定哪些香蕉可以去皮,以及何时去皮。在编程术语中:
Banana
类指定每个香蕉都有一个
peel
方法,以及该方法是什么

当Eckel不
a.peel(1)时他指定他正在剥香蕉
a
(而不是香蕉
b
)。就我而言,作为一个面向对象的程序员,这就是使用香蕉及其方法所需要知道的全部内容


类、对象和实例方法在很多地方都有很多描述。您可以查看它是否有助于您搜索其他描述以补充Eckel的描述。

@OleV.V。是的,你说得对。这个问题的标题不正确。很抱歉更正了标题。您可以编辑问题并输入一个涵盖范围更广的标题。更好的是,如果可以的话,你也可以更好地解释你不理解的东西。当你问“它是如何工作的?”时,你是在问如何使用它以及结果是什么,还是在问它是如何在幕后实现的?(我从来都不喜欢布鲁斯·埃克尔的解释。就我的口味而言,他太多地走在幕后,这有时会产生比答案更多的新问题。)课堂上没有抄袭任何东西。方法在类中,对象有对类的引用。@OleV.V。好的,试着在问题中再解释一下。不,对象是类的实例。静态变量在类中,实例变量在实例中:根本不在类中。所有方法都在类中,非静态方法需要一个实例来调用它们,正如Bruce Eckel在您的引用中所说,该实例作为一个秘密变量提供。静态方法只需要类调用它们,因为它们就在那里,没有实例含义。问题是:当我调用一个方法时,对象是使用它自己的方法(在类中描述)还是使用类中的“共享”或“公共”方法。我认为user207421的回答很好地涵盖了这一点。特别是现在我对这一点有了更好的理解:
Banana.peel(a,1)