java - 构造函数和类之间的关系如何?

标签 java oop constructor

我已经开始学习OOP并且我理解了类的概念,我明白通过使用构造函数我们可以将我们的类与程序的其余部分屏蔽开来,但我想更多地了解类与其类之间的关系构造函数。

当我设置构造函数时,它正在初始化我的实例变量,但它会复制我的类,然后我只处理构造函数,还是将它用作我的类和程序其余部分之间的中介,即它将信息传递到类中?

这是我上周制作的程序的示例。

class Pets

{

private String breed ;
private String coat ;
private String temperment ;

//constructors with 3 parameters and 3 instance variables.
public Pets ( String aBreed, String aCoat, String aTemperment )

{

breed = aBreed ;
coat = aCoat ;
temperment = aTemperment ;

}

//Setters
public void setBreed ( String aBreed ) { breed = aBreed ; }
public void setCoat ( String aCoat ) { coat = aCoat ; }
public void setTemperment ( String aTemperment ) { temperment = aTemperment ; }


//Getters
public String getBreed() { return breed ; }
public String getCoat() { return coat ; }
public String getTemperment() { return temperment ; }

//petDisplay - A method to print information about pets.
public void petDisplay()

{

System.out.println ( "This pet is a " + breed + ", it has a " + coat + " coat and is " + temperment + "." ) ;

}

最佳答案

构造函数不是使用实例的方式,而是实例在使用之前启动的方式。

例如,在您的代码中,您对所有将使用您的类的 future 编码员说的是,如果他们想要宠物,他们必须提供品种、外套和性情。这是确保您的类不会被不良使用的一种方法。

然后,您就有了 getter 和 setter,用于访问类属性。

最后,利用这些方法进行计算和处理。

现在是真正好的部分:因为您可以根据需要编写构造函数,所以您不应该直接分配属性,而应尽可能使用 setter。

为什么?因为这样,您可以检查数据的有效性,如果它们对您的类(class)不利,则拒绝它们。这是一个例子:

public void setBreed(String aBreed)
{
  if(aBreed == null)
  {
    System.out.print("You should give a breed !");
  }
  else
  {
    breed = aBreed;
  }
}

你的构造函数将变成

public Pets ( String aBreed, String aCoat, String aTemperment )
{
  setBreed(aBreed) ;
  setCoat(aCoat) ;
  setTemperment(aTemperment) ;
}

这样您的代码将会更加健壮,并且您会看到更少的错误!公平地说,您应该使用异常来告诉此类错误(例如 ArgumentNullException),但这是另一个问题。

重要的是要知道默认构造函数经常出于多种原因而被使用。然后,我就有尽可能添加默认构造函数的习惯。

public Pets()
{
  this("Breedless","Grey","WhateverIsATemperment");
}

祝你有美好的一天!

关于java - 构造函数和类之间的关系如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42913518/

相关文章:

java - 为什么 Spring Value 中的默认值不能防止 NULL 错误?

java - 添加到自定义列表

python-3.x - 将列表从另一个类传递给类内的方法,以便修改所述列表并传回 Python 中的原始类

c++ - 直接在其他类的构造函数中使用类的构造函数

c++ - 防止在 C++ 中构造/初始化数组元素

java - 迭代存储在字符串中的一系列位

java - 将单个元素检入具有多列的 ArrayList

c++ - 派生类的函数重载

javascript - javascript 原型(prototype)继承如何用于数组、函数

objective-c - Objective C - init 和构造函数之间的区别?