创建Person类的Java程序错误

时间:2009-09-27 09:41:12

标签: java inheritance constructor

请允许任何人告诉我以下代码中的错误是什么?

问题是

  

创建一个具有

的班级人员      
      
  • 存储人名的变量'name'。
  •   
  • 一个构造函数,它接受一个用于初始化名称变量的参数
  •   
  • 显示名称的getName()方法。
  •   
  • 受保护的方法setName(),它接受一个用于修改名称变量的参数。
  •   
     

创建名为student的上述类的子类,其中包含

     
      
  • 存储学生PRN的变量
  •   
  • 存储学生所属课程的变量
  •   
  • 一种方法,显示学生的所有详细信息,即名称,名称和课程。
  •   

计划:

class Person
{
 String name;
 Person(String s)
 {
  name=s;
 }
 void getName()
 {
  System.out.println("Name is "+name);
 }
 void setName(String sa)
 {
  name=sa;
 }
}
class subPerson extends Person
{
 //String sa;
 int Prn;
 String course;
 subPerson(String s,int P,String co)
 {
  name=s;
  Prn=P;
  course=co;
 }
 void displayal()
 {
  System.out.println("Name is ");
  System.out.println("PRN is "+Prn);
  System.out.println("course is "+course);
 }
}
class Inher
{
 public static void main(String args[])
 {
  int area,volumea;
  subPerson h1 = new subPerson("Abhishek",20,"MBA");
  h1.displayal();
 }
}

3 个答案:

答案 0 :(得分:6)

Person的构造函数接受一个String。由于subPerson扩展了Person,它的构造函数将调用Person的构造函数。默认情况下它会使用no-arg构造函数,但由于Person没有,所以它不起作用。

尝试将subPerson的构造函数更改为:

 subPerson(String s,int P,String co)
 {
  super(s);
  Prn=P;
  course=co;
 }

答案 1 :(得分:1)

我假设编译(我不打算检查),那么根本问题是在displayal()方法中,你实际上并没有打印出名字......

  

System.out.println(“名称是”);

实际上应该是

  

System.out.println(“名称是”+名称);

除此之外,还存在一些不遵循典型的java编码约定的问题。虽然代码可以编译并执行所需的操作,但是大多数java人员可能会因为“不遵循命名约定”而不是尝试解决问题,因为代码看起来很不寻常。

答案 2 :(得分:0)

我还建议你多注意名字。它们很重要,值得仔细考虑。

“subPerson”作为一个班级名字让我很冷淡。除了糟糕的驼峰案例风格,作业明确要求学生一班。你为什么选择“subPerson”?

我也建议反对“displayal”(原文如此)方法。正确的习惯用法是覆盖Object中的toString()方法。

我会这样写:

/**
 * Person
 * User: Michael
 * Date: Sep 27, 2009
 * Time: 10:00:00 AM
 */
public class Person
{
   private String name;

   public static void main(String[] args)
   {
      Person s = new Student("Foo Bar", "35", "Intro To Java");

      System.out.println(s);
   }

   public Person(String name)
   {
      if ((name == null) || (name.trim().length() == 0))
         throw new IllegalArgumentException("name cannot be blank or null");

      this.name = name;
   }

   public String getName()
   {
      return name;
   }

   public void setName(String name)
   {
      if ((name == null) || (name.trim().length() == 0))
         throw new IllegalArgumentException("name cannot be blank or null");

      this.name = name;
   }

   @Override
   public String toString()
   {
      return "Person{" +
      "name='" + name + '\'' +
      '}';
   }
}

class Student extends Person
{
   private String prn;
   private String course;

   Student(String name, String prn, String course)
   {
      super(name);

      this.prn = prn;
      this.course = course;
   }

   @Override
   public String toString()
   {
      return "Student{" +
      "name='" + getName() + '\'' + 
      ", prn='" + prn + '\'' +
      ", course='" + course + '\'' +
      '}';
   }
}