阅读Bruce Eckel目前的“思考Java”。达到“this”关键字点。我不清楚对象和“这个”是如何工作的。布鲁斯·埃克尔在他的书中说:
如果您有两个相同类型的对象,称为a和b,您可能想知道如何为这两个对象调用方法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和b,你可能想知道你可以为这两个对象调用方法peel()。如果只有一个名为peel()的方法,该方法如何知道是否为对象a或b调用它?
它是什么意思“只有一种叫做peel()的方法”
我们为每个对象创建了类中的所有方法。所以我们只是从对象中调用方法。
布鲁斯·埃克尔的意思是什么?
如果你和我都在笑的时候笑,你可以说我们有分享笑的能力。
我想以同样的方式在类的实例之间共享方法。香蕉分享他们可以去皮的财产。 Banana
类指定了Banana
对象是什么以及它们可以做什么。有些人将该类描述为用于创建对象的模板或用于标记它们的橡皮图章。所有的香蕉都可以去皮,但程序员仍然会决定哪些香蕉真正剥皮,何时剥皮。在编程术语中:Banana
类指定每个香蕉都有peel
方法,以及该方法是什么。
当Eckel做a.peel(1);
时,他指的是他正在剥香蕉a
(而不是香蕉b
)。就我而言,作为一个面向对象的程序员,你需要知道使用香蕉及其方法。
在许多地方以多种方式描述了类,对象和实例方法。您可能会看到它是否可以帮助您搜索其他描述以补充Eckel的描述。