好的我正试图解决这个问题:
- 使用以下属性编写为student对象创建类的应用程序: 学号,姓名,地址,电话号码和课程。
醇>编写一个测试程序,设置并获取类中的每个属性。 测试程序还应显示该类中的所有属性。
- 使用上一个问题中的student类及其属性,编写一个包含用户定义和默认构造函数的应用程序(扩展前一个程序)。
醇>编写测试程序以演示两种构造函数的使用。
这是大学的工作单,对Java中的Objects进行了一些修订。
困扰我的部分是它要求同时拥有用户定义和默认构造函数的部分?
我的印象是不可能做到的?因为如果你自己不提供构造函数,JVM将提供一个(默认构造函数?)。但是如果你定义了任何构造函数,那么默认构造函数会变得不可用吗?
这是一个措辞不好的任务,还是意味着别的什么?
答案 0 :(得分:7)
我很确定创建工作表的人是指“No-arg构造函数”而不是“默认构造函数”。
您无法在技术上创建Default构造函数(因为这是由编译器为您完成的),但是您可以显式创建no-arg构造函数(在功能上是相同的)。
所以,是的,措辞不好的任务。
答案 1 :(得分:3)
在java中,当您没有显式指定构造函数时,编译器将添加一个“默认”构造函数:构造函数thar不接受参数。如果指定构造函数,则编译器不会添加该构造函数。
例如,这段代码编译正常:
class Student {
String name;
int age;
// ...
}
// ...
Student myself = new Student();
但是这段代码不会编译:
class Student {
String name;
int age;
// ...
public Student(String name) {
this.name = name;
}
}
// ...
Student myself = new Student(); // compilation error: use new Student("Jhon Smith");
因为默认构造函数不再可用。
答案 2 :(得分:0)
当你不实现你的一个时,Java提供默认构造函数。但是,当您创建自定义构造函数时,如果要使用不带参数的构造函数,则必须实现默认值。让我们假设我们有class A{}
对于它看起来像这样:
public class A{
public A(){//auto generated constructor
}
}
但是如果你提供一个自定义构造函数自动生成的构造函数dissapear。
答案 3 :(得分:0)
当程序员提供任何构造函数时,不会创建默认构造函数。但是在这里我期待这个任务的作者将“默认”构造函数理解为没有任何参数的构造函数。
总结一下,您将拥有两个构造函数:
public class MyClass {
public MyClass () {
}
public MyClass (long studentNumber, String name, String address....) {
}
答案 4 :(得分:0)
上面的说法是正确的,但是,在OO术语中,“默认构造函数”是一个不带参数的构造函数。另一种类型的构造函数是将参数引入构造函数以使事物自定义的构造函数。
即:
Student(){ //default constructor
number = 0;
name = "bob";
//etc etc
}
student(int nm, int nm, etc etc){ //parametrized constructor
number = nm;
name = nm;
//etc etc
}
答案 5 :(得分:0)
根据Charatan& Kans,Java两个学期第3版,第196页:
构造函数就像任何方法都可以重载一样,意味着在单个类中我们可以有2个或更多构造函数,其中一个接受1个参数,如:("studentName")
,在同一个类中,另一个构造函数可能需要2个参数{ {1}},仍然在同一个类中的另一个构造函数可能有3个参数("studentName", " studentId")
。
这是构造函数重载。这是一个例子:
("studentName", "studentId", " studentPhoneNumber")
以上是构造函数重载的一个明显示例。现在在OBJECT创建期间,意味着在创建学生对象时,将由程序员利用他/她选择的构造函数,使用0个参数(默认为REINSERTED)或再次使用1个参数,他/她可以选择包含2个参数等的构造函数。这是用户的选择和要求。
不需要超类或多个类,因为构造函数可以重载,如上所示。