2009-09-27 4 views
0

Пожалуйста, кто-нибудь скажет мне, что ошибка в следующем фрагменте кода?Ошибка Java-программы при создании класса Person

Вопрос

Создайте класс человека, который имеет

  • переменную «имя», которая хранит имя человека.
  • Конструктор, который принимает единственный аргумент, который используется для инициализации переменной имени
  • Метод getName(), который отображает имя.
  • Защищенный метод setName(), который принимает один аргумент, который используется для изменения переменной имени.

Создайте подкласс указанного класса под названием студент, который содержит

  • переменных для хранения PRN студента
  • переменных для хранения Конечно, студент принадлежит
  • Способа, который отображает все детали студента, то есть имя, 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

Лоуренса прав. Примечание. Классы классов начинаются с символа верхнего регистра, имя из переменной с строчным символом. Лучшее имя для субпользователя будет SubPerson –

+0

... или Студент в соответствии с заданной спецификацией :) – Esko

+0

Если кто-то может подумать о более описательном заголовке для этого вопроса, то, пожалуйста, отредактируйте его :) – Jonik

ответ

6

конструктор персоны принимает строку. Поскольку subPerson расширяет Person, его конструктор вызовет конструктор Person. По умолчанию он будет использовать конструктор no-arg, но поскольку Person его не имеет, он не будет работать.

Попробуйте изменить конструктор subPerson на это:

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

И весь класс должен храниться в разделенных файлах. –

+4

В стороне: ваша капитализация немного беспорядочна, что делает ваш код трудным для чтения. В Java классы обычно имеют заглавное имя (например: SubPerson), тогда как методы, поля и локальные переменные (включая параметры) обычно начинаются с строчной буквы. –

+3

mykhaylo: На самом деле это не так. Исходный файл .java может иметь только один общедоступный класс верхнего уровня, который должен иметь имя, согласующееся с исходным файлом, но может содержать несколько непубличных классов верхнего уровня. (хотя я вообще не рекомендую это делать) –

1

Я предполагаю, что компилирует (я не буду, чтобы проверить, что), то основная проблема заключается в том, что в методе displayal(), вы не на самом деле распечатать название ...

System.out.println ("Name is");

должно быть на самом деле что-то вроде

System.out.println ("Название:" + имя);

Помимо этого существуют некоторые проблемы с несоблюдением типовых соглашений о кодировке java. Хотя код может компилироваться и делать то, что желательно, большинство java-парней, скорее всего, будут зависеть от «не следующих соглашений об именах», а не пытаться исправить проблему, потому что код выглядит необычным.

0

Я также рекомендую вам уделять больше внимания именам. Они имеют большое значение и заслуживают тщательной мысли.

«subPerson» как название класса оставляет меня довольно холодным. Помимо стиля бедных верблюдов, назначение явно требует класса Student. Почему вы пошли с «subPerson»?

Я бы посоветовал не использовать «показательный» (sic) метод. Правильная идиома - переопределить метод toString() в Object.

Я бы написал так: ответ

/** 
* 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 + '\'' + 
     '}'; 
    } 
} 
Смежные вопросы