繁体   English   中英

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

[英]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.";
    }

}

在这里,您清楚地将数据(字段nameage )和代码(方法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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM