有人能简单解释OOP环境中的方法与函数吗?
当前回答
它们通常是可互换的,但方法通常指类内的子例程,函数通常指类外的子例程。例如,在Ruby中:
# function
def putSqr(a)
puts a ** 2
end
class Math2
# method
def putSqr(a)
puts a ** 2
end
end
在Java中,所有内容(包和导入语句除外)都必须在类中,人们几乎总是将它们称为“方法”。
其他回答
类上的方法作用于类的实例,称为对象。
class Example
{
public int data = 0; // Each instance of Example holds its internal data. This is a "field", or "member variable".
public void UpdateData() // .. and manipulates it (This is a method by the way)
{
data = data + 1;
}
public void PrintData() // This is also a method
{
Console.WriteLine(data);
}
}
class Program
{
public static void Main()
{
Example exampleObject1 = new Example();
Example exampleObject2 = new Example();
exampleObject1.UpdateData();
exampleObject1.UpdateData();
exampleObject2.UpdateData();
exampleObject1.PrintData(); // Prints "2"
exampleObject2.PrintData(); // Prints "1"
}
}
在OO世界中,这两个词通常用来表示同一件事。
从纯数学和CS的角度来看,当使用相同的参数(f(x,y)=(x+y))调用函数时,函数将始终返回相同的结果。另一方面,方法通常与类的实例相关联。尽管如此,大多数现代OO语言在很大程度上不再使用术语“函数”。许多静态方法可以很像函数,因为它们通常没有状态(不总是真的)。
函数和方法看起来非常相似。它们也有输入和返回输出。区别在于方法在类内部,而函数在类外部。
函数是执行特定任务的一组指令或过程。它可以用来将代码分割成易于理解的部分,这些部分也可以被调用或重用。
方法是可以对对象执行的操作。它也称为存储为对象财产的函数。
主要区别:函数不需要任何对象并且是独立的,而方法是一个函数,它与任何对象链接。
//firstName() is the function
function firstName(){
cosole.log('John');
}
firstName() //Invoked without any object
const person = {
firstName: "John",
lastName: "Doe",
id: 5566,
};
//person.name is the method
person.name = function() {
return this.firstName + " " + this.lastName;
};
document.getElementById("demo").innerHTML =
"My father is " + person.name() //performs action on object;
一般来说:方法是属于类的函数,函数可以在代码的任何其他范围内,因此您可以声明所有方法都是函数,但不是所有函数都是方法:
以下面的python为例:
class Door:
def open(self):
print 'hello stranger'
def knock_door():
a_door = Door()
Door.open(a_door)
knock_door()
给出的示例向您展示了一个名为“Door”的类,该类具有名为“open”的方法或操作,它被称为方法,因为它是在类中声明的。下面还有一部分代码带有“def”,它定义了一个函数,这是一个函数因为它没有在类中声明,这个函数调用我们在类中定义的方法,正如您所看到的那样,最后函数被自己调用。
正如您所看到的,您可以在任何地方调用函数,但如果您想调用方法,要么必须传递一个与声明方法的类(class.method(object))类型相同的新对象,要么必须调用对象内部的方法(object.method()),至少在python中是这样。
将方法视为只有一个实体可以做的事情,所以如果你有一个Dog类,那么只在该类中有一个bark函数是有意义的,这就是一个方法,如果你还有一个Person类,那么编写一个不属于任何类的函数“feed”是有意义的,因为人和狗都可以被喂养,你可以调用这个函数,因为它不属于任何特定的类。