java—创建子类对象并在子类中打印超类变量的问题

mo49yndu  于 2021-07-08  发布在  Java
关注(0)|答案(1)|浏览(361)

这里我有代码,我会解释我的每一个问题。

public static void main(String[] args) {
    String choice = null ;
   Scanner asmnt2=new Scanner(System.in);
         do {
          System.out.println("Enter you're name:");
   String name =asmnt2.nextLine();
   System.out.println("Enter you're Phone number:");
   String phone =asmnt2.nextLine();
   System.out.println("Enter you're id number :");
   String id =asmnt2.nextLine();
       person data = Employee( name,  phone,  id);
    person data2= Customer(name , phone ,id);

好吧,这是“雇员”和“客户”两个词中的一个错误,建议我为它们中的每一个都指定一个方法。

data.setSalary(salary);
       System.out.println("Choose from the list below :");
        System.out.println("1. show Employee information and salary for six months");
         System.out.println("2. show customer information");
          System.out.println("3. Exit");
 if(choice=="1"){
              System.out.println("Enter you're Salary :");
       String salary =asmnt2.nextLine();
                      System.out.println("Employee{ " + Employee.toString());
          }else if(choice =="2"){
              System.out.println("Customer{ " + Customer.toString());
          }else{
              System.out.println("Wrong entry, please try again");
          }
          } while(choice=="3");

    }

我添加这个部分是因为它显示我添加了一个“scanner”,它显示我希望用户填充值这可能是错误的原因,我还不知道。

class person{
                private String name;
                private String phone;
                private int id;

                public person(String nm, String ph, int ID){
                    name=nm;
                    phone=ph;
                    id=ID;

            }
                public String toString(){
                    return "name :"+ name + "phone :"+ phone + "ID :" + id;
            }
             }

         class Employee extends person{
            private double salary;
            private double S;

        class Customer extends person{
            private double sales;

            public Customer(String nm, String ph, int ID){
            super(nm,ph,ID);
            sales=0.0;
         }   

        class Employee extends person{
        private double salary;
        private double S;

        public Employee(String nm, String ph, int ID){
        super(nm,ph,ID);
        salary=0.0;
        }
        }
46qrfjad

46qrfjad1#

您创建的对象没有传递初始参数。在这里,你会得到一个错误,因为你没有任何默认构造函数没有任何参数。

person data=new Employee();
person data2=new Customer();

将这两条线路更换为

person data=new Employee("String1", "String2", 12);
person data2=new Customer("String1", "String2", 12);

并且在tostring()方法中,尝试使用getmethode返回变量。这样地,

public String toString(){
        return "name :"+ getName() + "phone :"+ getPhone() + "ID :" + getId();
}

或者您可以更改访问修饰符。
这是你编辑完问题后想的这句话

public class mine{

    public static void main(String args[]){
      person data=new Employee();
      person data2=new Customer();

    }

}

在这里,您试图创建两个对象类employee和类customer。但您不向构造函数传递任何参数。 Employee() 这是干什么的?这将尝试在没有任何参数的情况下调用默认构造函数。

public Employee(){
    //THIS IS THE DEFAULT CONSTRUCTOR
}

但是你只有一个参数化的构造函数

public Employee(String nm, String ph, int ID){
super(nm,ph,ID);
salary=0.0;
}

这就是为什么你会出错。如果您想获得用户输入,那么创建对象。先获取输入,然后像这样将值传递给构造函数,

Scanner scan = new Scanner(System.in);
String input1 = scan.nextLine();
String input2 = scan.nextLine();
input input3 = scan.nextInt();

person data = Employee(input1,input2,input3);

相关问题