为参数化构造函数接收值的方法

时间:2014-07-07 00:18:07

标签: java input constructor

我在这里遇到了一个问题。有人告诉我通过参数化构造函数初始化值。编写一个方法“getInput”来获取这些属性的值,调用参数化构造函数然后返回一个Child对象。

我认为这就是我所做的......但是当我调用这个方法时,我会得到这样的结果:Child @ 75d9fd51 这只是对象参考吗?我正试图打印输入的年龄,姓名和等级。 提前谢谢!

到目前为止,这就是我所拥有的:

import java.util.Scanner;

class Child{
    int age;
    String name;
    char grade;

public Child(){

}

public Child(int age, String name, char grade) {
    this.age = age;
    this.name = name;
    this.grade = grade;
}
public int getAge() {
    return age;
}
public void setAgel(int age) {
    this.age = age;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public char getGrade() {
    return grade;
}
public void setGrade(char grade) {
    this.grade = grade;
}
}

public class Data {

public static Child getInput(Child s){
    Scanner input = new Scanner(System.in);
    System.out.println("Input age: ");
    int age = input.nextInt();
    System.out.println("Input name: ");
    String name = input.next();
    System.out.println("Input grade: ");
    char grade = input.next().charAt(0);
    s = new Child(age, name, grade);

    return s;
}

public static void main(String[] args) {
    // TODO Auto-generated method stub


    Child x = new Child(20, "James", 'A');   //I want this to be changed with input

    getInput(x);

    System.out.print(x);
}

4 个答案:

答案 0 :(得分:2)

覆盖您孩子班级中的toString方法

public String toString(){
        return age + " " + name + " " + grade;
    }

当您在代理类中运行此行时,这是Data

public static void main(String...args){
   Child x = new Child(20, "James", 'A');   
   System.out.print(x.toString());
  }

输出:

Input age: 
32
Input name: 
izak
Input grade: 
A
32 izak A

答案 1 :(得分:2)

不,'孩子@ 75d9fd51'不是对象引用。它是存储在Child类的实例x中的数据。在Java编程语言中,每个类都提供一个hashCode()方法,该方法将存储在类实例中的数据摘要化为单个哈希值(32位有符号整数)。

如果您想获取输入数据并打印输入的数据(年龄,姓名和等级),您应该进行一些更改:

首先,将getInput(x);更改为x = getInput(x);。此语句将新类分配给类x。

其次,把方法

public String toString() { 
   return "Input age: " + getAge() + "\nInput name: " + getName() + "\nInput grade: " +        getGrade(); 
}

在儿童班内。当您在main方法上调用System.out.print(x);时,实际上会调用System.out.print(x.toString());

答案 2 :(得分:1)

通用Object没有特定的可打印表示,因为Java无法猜测您是如何打印它的。所以你得到的是记忆中的参考。

但该语言为您提供了来自public String toString()类的Object方法,可以覆盖该方法以提供您喜欢的特定表示。将对象传递给println方法时会自动调用此方法。

例如:

class Child {
  public String toString() { 
       return name + "," + grade + "," + age;
  }
}

答案 3 :(得分:1)

传递对象时,System.out.println()将打印出对象toString方法的结果。默认输出采用您所看到的格式。如果您想要查看更多信息,可以单独传递字段

System.out.println("Age: " + x.getAge());
System.out.println("Name: " + x.getName());
System.out.println("Grade: " + x.getGrade());

或者您可以覆盖toString上的Child方法:

@Override
public String toString() {
    return "Age: " + this.age + ", Name: " + this.name + ", Grade: " + this.grade;
}

现在您可以像以前一样致电System.out.println(x)

另一方面,创建和传递Child的实例没有意义,只是用getInput中的新实例替换它。