[英]Why are accessor methods defined within the main class?
我目前正在为我的程序编程模块学习 Java。 我读过在程序编程中,记录必须在主 class 之外定义,但这些记录的访问器方法必须在主 class 中定义。
一个例子如下所示:
class person // Record definition
{
String name;
int age;
}
class personalDetails // Main class
{
public static void main (String [] a)
{
mainMethod();
System.exit(0);
}
public static void mainMethod()
{
// Main method
}
// Getter method to get name
public static String getName(person p)
{
return p.name;
}
// Getter method to get age
public static int getAge(person p)
{
return p.age;
}
// Setter method to set name
public static void setName(person p, String name)
{
p.name = name;
}
// Setter method to set age
public static void setAge(person p, int age)
{
p.age = age;
}
}
为什么这是必要的?
我知道我们不能在记录的定义中定义访问器方法,因为这是一种 OOP 方法,但我不完全理解为什么我们不能在访问器方法所在的主要 class 中定义记录。
在“传统”过程编程中,代码和它所操作的数据是完全分开的:你有没有分配任何代码的数据结构,你有没有能力存储代码的代码。
在 Java 中,两者混合在一起:所有代码和所有数据都与类有某种关系(我在此定义中也包括接口、枚举和记录,区别对此并不重要):方法是 class 的一部分并且字段也属于类。
因此,在正常的 Java 样式中,您将定义一个类型的字段以及作用于它的方法:
class Person {
String name;
int age;
// omitting constructors
public String getDescription() {
return name + " is " + age + " years old.";
}
}
在这里,您清楚地将数据(字段name
和age
)和代码(方法getDescription
)组合成一个单元。
在过程编程中,这两件事是分开的(我在这里使用的是 Java 风格的语法,但我显示的确切代码不是有效的 Java)。
type Person {
String name;
int age;
}
String getDescription(Person p) {
return p.name + " is " + p.age + " years old.";
}
在 Java 中不可能使用任何类型的方法,所以要接近这个,你必须将它放入 class(任何 class 真的):
class Person {
String name;
int age;
}
class PersonMethods {
static String getDescription(Person p) {
return p.name + " is " + p.age + " years old.";
}
}
另请注意,我创建的方法static
表明它不作用于PersonMethods
的实例。 这是另一个迹象,表明我们正在使用 Java 来实现编程 model,而它并不打算实现。
这些方法到底在哪里并不重要。 从理论上讲,您甚至可以将它们放入Person
本身并使用Person p
参数保留它们static
,但这可能看起来太像常规的 OOP。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.