创建一个设定默认值的构造方法
时间: 2024-05-12 15:19:53 浏览: 14
在Java中,可以使用构造函数来为类的实例设置默认值。以下是一个示例:
```
public class MyClass {
private String name;
private int age;
public MyClass() {
this.name = "John Doe";
this.age = 18;
}
public MyClass(String name, int age) {
this.name = name;
this.age = age;
}
// getters and setters
}
```
在上面的例子中,我们定义了两个构造函数。第一个构造函数没有参数,它将`name`设置为`John Doe`,将`age`设置为18。如果我们创建一个新的`MyClass`实例而没有提供任何参数,则这些默认值将被使用。
第二个构造函数接受两个参数`name`和`age`,并使用它们来设置`MyClass`实例的属性。
使用默认值的构造函数可以使代码更简洁和易读。如果我们有多个属性需要设置默认值,我们可以使用一个单独的默认构造函数,而不是在每个构造函数中重复这些默认值。
相关问题
用java实现设计一个Person 类,其成员变量有:姓名(name)、性别(gender)、年龄(age);再设计一个Student类,它是类Person的子类,其成员变量有:学号(id)、班名(cname)、成绩(score),类Student中要有一个方法 display(),用来显示一个学生的信息。编写一个测试程序,创建一个Student类的对象,要求name和id 是自己的姓名和学号,(试采用多种方法给对象赋值:默认值、无参构造方法、有参构造方法和设值方法。注意子类调用父类构造方法的方式)输出学生的各种信息,学生的基本信息在类Student的带参数的构造方法中设定。
好的,我来为您解答这个问题。
首先,我们需要设计Person类和Student类。
Person类的代码如下:
```java
public class Person {
private String name; // 姓名
private String gender; // 性别
private int age; // 年龄
// 无参构造方法
public Person() {
name = "";
gender = "";
age = 0;
}
// 带参构造方法
public Person(String name, String gender, int age) {
this.name = name;
this.gender = gender;
this.age = age;
}
// 设值方法
public void setName(String name) {
this.name = name;
}
public void setGender(String gender) {
this.gender = gender;
}
public void setAge(int age) {
this.age = age;
}
// 获取方法
public String getName() {
return name;
}
public String getGender() {
return gender;
}
public int getAge() {
return age;
}
}
```
Student类继承自Person类,代码如下:
```java
public class Student extends Person {
private String id; // 学号
private String cname; // 班名
private double score; // 成绩
// 无参构造方法
public Student() {
super(); // 调用父类的无参构造方法
id = "";
cname = "";
score = 0;
}
// 带参构造方法
public Student(String name, String gender, int age, String id, String cname, double score) {
super(name, gender, age); // 调用父类的带参构造方法
this.id = id;
this.cname = cname;
this.score = score;
}
// 设值方法
public void setId(String id) {
this.id = id;
}
public void setCname(String cname) {
this.cname = cname;
}
public void setScore(double score) {
this.score = score;
}
// 获取方法
public String getId() {
return id;
}
public String getCname() {
return cname;
}
public double getScore() {
return score;
}
// 显示学生信息
public void display() {
System.out.println("姓名:" + getName());
System.out.println("性别:" + getGender());
System.out.println("年龄:" + getAge());
System.out.println("学号:" + getId());
System.out.println("班名:" + getCname());
System.out.println("成绩:" + getScore());
}
}
```
接下来,我们编写一个测试程序,创建一个Student对象,并输出其信息。
```java
public class Test {
public static void main(String[] args) {
// 使用默认值创建Student对象
Student student1 = new Student();
student1.display();
// 使用无参构造方法创建Student对象,并使用设值方法给对象赋值
Student student2 = new Student();
student2.setName("张三");
student2.setGender("男");
student2.setAge(18);
student2.setId("20190101");
student2.setCname("计算机科学与技术1班");
student2.setScore(90);
student2.display();
// 使用带参构造方法创建Student对象
Student student3 = new Student("李四", "女", 20, "20190102", "计算机科学与技术2班", 80);
student3.display();
}
}
```
输出结果如下:
```
姓名:
性别:
年龄:0
学号:
班名:
成绩:0.0
姓名:张三
性别:男
年龄:18
学号:20190101
班名:计算机科学与技术1班
成绩:90.0
姓名:李四
性别:女
年龄:20
学号:20190102
班名:计算机科学与技术2班
成绩:80.0
```
以上就是使用Java实现设计一个Person类和Student类,以及创建对象并输出学生信息的全部过程。
【问题描述】 1)设计一个通用类GeometricObject可以用来建模所有的几何对象。 包括成员变量: •颜色color是一个字符串,在无参构造函数中将其初始化为"white"。 •filled表示圆是否填充,为boolean类型,在无参构造方法中将其初始化为false。 2)设计一个接口Computable,该接口中包括: •常量PI=3.14,可以用于计算圆的面积。 •double getArea(); \\计算面积 •double getPerimeter(); \\计算周长 3)设计一个名为Triangle的类来扩展GeometricObject类,并实现接口Computable。该类包括: •三个名为side1、side2和side3的double成员变量表示这个三角形的三条边,它们的默认值是1.0。 •一个无参构造方法创建默认的三角形,将三角形的三条边设为默认值1.0。 •一个能创建带指定side1、side2和side3的三角形的构造方法。 4)设计一个Circle类来扩展GeometricObject,并实现接Computable。该类包括了: •一个成员变量:radius,表示圆的半径; •一个带参的构造方法用于设定圆的半径:radius; 5)设计一个类 Factory,该类中包括一个方法: Computable getComputableShapeInstance(int shape, Scanner reader); 当shape 为 1时输入圆的半径,创建一个Circle的对象, 并返回该对象的引用, 当shape 为 2时输入三角形的三条边,创建一个Triangle的对象, 并返回该对象的引用, 为了便于在作业系统中进行测试,将传入一个Scanner 对象的引用,并在该方法中使用reader输入数据。 提示:可以用下面方法按四舍五入输出两位小数: System.out.printf("%.2f", s);
以下是该题目的Java代码实现:
GeometricObject类:
```
public class GeometricObject {
protected String color;
protected boolean filled;
public GeometricObject() {
color = "white";
filled = false;
}
public GeometricObject(String color, boolean filled) {
this.color = color;
this.filled = filled;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public boolean isFilled() {
return filled;
}
public void setFilled(boolean filled) {
this.filled = filled;
}
}
```
Computable接口:
```
public interface Computable {
double PI = 3.14;
double getArea();
double getPerimeter();
}
```
Triangle类:
```
public class Triangle extends GeometricObject implements Computable {
private double side1;
private double side2;
private double side3;
public Triangle() {
side1 = side2 = side3 = 1.0;
}
public Triangle(double side1, double side2, double side3) {
this.side1 = side1;
this.side2 = side2;
this.side3 = side3;
}
public double getSide1() {
return side1;
}
public void setSide1(double side1) {
this.side1 = side1;
}
public double getSide2() {
return side2;
}
public void setSide2(double side2) {
this.side2 = side2;
}
public double getSide3() {
return side3;
}
public void setSide3(double side3) {
this.side3 = side3;
}
@Override
public double getArea() {
double p = getPerimeter() / 2;
return Math.sqrt(p * (p - side1) * (p - side2) * (p - side3));
}
@Override
public double getPerimeter() {
return side1 + side2 + side3;
}
}
```
Circle类:
```
public class Circle extends GeometricObject implements Computable {
private double radius;
public Circle(double radius) {
this.radius = radius;
}
public double getRadius() {
return radius;
}
public void setRadius(double radius) {
this.radius = radius;
}
@Override
public double getArea() {
return PI * radius * radius;
}
@Override
public double getPerimeter() {
return 2 * PI * radius;
}
}
```
Factory类:
```
import java.util.Scanner;
public class Factory {
public Computable getComputableShapeInstance(int shape, Scanner reader) {
Computable c = null;
switch (shape) {
case 1:
System.out.print("请输入圆的半径:");
double radius = reader.nextDouble();
c = new Circle(radius);
break;
case 2:
System.out.print("请输入三角形的三条边:");
double side1 = reader.nextDouble();
double side2 = reader.nextDouble();
double side3 = reader.nextDouble();
c = new Triangle(side1, side2, side3);
break;
default:
System.out.println("输入不合法!");
}
return c;
}
}
```
使用示例:
```
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Factory factory = new Factory();
Scanner reader = new Scanner(System.in);
Computable c1 = factory.getComputableShapeInstance(1, reader);
System.out.print("圆的面积为:");
System.out.printf("%.2f\n", c1.getArea());
System.out.print("圆的周长为:");
System.out.printf("%.2f\n", c1.getPerimeter());
Computable c2 = factory.getComputableShapeInstance(2, reader);
System.out.print("三角形的面积为:");
System.out.printf("%.2f\n", c2.getArea());
System.out.print("三角形的周长为:");
System.out.printf("%.2f\n", c2.getPerimeter());
reader.close();
}
}
```
输入示例:
```
请输入圆的半径:5
请输入三角形的三条边:3 4 5
```
输出示例:
```
圆的面积为:78.50
圆的周长为:31.40
三角形的面积为:6.00
三角形的周长为:12.00
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pptx](https://img-home.csdnimg.cn/images/20210720083543.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)