为什么在主类中定义访问器方法



我目前正在为我的过程编程模块学习Java。我读过在过程编程中,记录必须在主类之外定义,但这些记录的访问器方法必须在主类内定义。

示例如下:

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方法,但我不完全理解为什么我们不能在访问器方法所在的主类中定义记录。

In"传统的";过程编程代码和它所操作的数据是完全独立的:你有没有任何代码分配给它的数据结构,你有没有能力存储代码的代码。

在Java中,这两者是混合的:所有代码和所有数据都与类有某种关系(我在这个定义中也包括接口、枚举和记录,区别对此并不重要(:方法是类的一部分,字段也属于类。

因此,在正常的Java风格中,您可以定义一个类型的字段以及作用于它的方法:

class Person {
String name;
int age;
// omitting constructors
public String getDescription() {
return name + " is " + age + " years old.";
}
}

在这里,您可以清楚地将数据(字段nameage(和代码(方法getDescription(组合到一个单元中。

在过程编程中,这两件事是分开的(我在这里使用Java风格的语法,但我显示的确切代码不是有效的Java(。

type Person {
String name;
int age;
}
String getDescription(Person p) {
return p.name + " is " + p.age + " years old.";
}

不属于任何类型的方法在Java中都是不可能的,所以为了接近这一点,您必须将其放入一个类(实际上是任何类(中:

class Person {
String name;
int age;
}
class PersonMethods {
static String getDescription(Person p) {
return p.name + " is " + p.age + " years old.";
}
}

还要注意,我创建了方法static,表示它不作用于PersonMethods的实例。这是另一个迹象,表明我们正在使用Java来实现一个本不打算实现的编程模型。

这些方法究竟在哪里并不重要。理论上,您甚至可以将它们放在Person本身中,并使用Person p参数将它们保留为static,但这可能看起来太像常规OOP了。

相关内容

  • 没有找到相关文章

最新更新