请允许任何人告诉我以下代码中的错误是什么?
问题是
创建一个具有
的班级人员
- 存储人名的变量'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();
}
}
答案 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 + '\'' +
'}';
}
}