2013-10-24 4 views
-2

Допустим, у меня есть супер класс Person и подкласс Employee Я хотел бы создать person класс сначала, а затем использовать его в качестве парам быть помещены в конструктор моего employee класса.Java Наследование с уже сформированным суперкласса

E.g. Public Empolyee (Person person ....) (Это приводит к ошибке конструктора, не найденной во время компиляции)

Сценарий «Мой случай» - это то, что у меня есть объект Person, который еще не был создан как сотрудник, а позже я хотел бы использовать его для создания объекта Employee, и я хотел бы передать переменные этого человека.

Так как я могу это сделать? Также, пожалуйста, объясните, нужно ли это делать так или нет.

+0

до сих пор путают, что вы пытаетесь спросить. – Trying

+0

Это зависит от того, чего вы пытаетесь достичь.Вообще то, что вы говорите, возможно, но детали зависят от того, чего вы пытаетесь достичь. Особенно, если мы доберемся до части «объясните, нужно ли это делать так или нет». –

+0

Я не понимаю, где проблема. Если вы хотите добавить параметр в свой конструктор, просто добавьте параметр в свой конструктор. – WilQu

ответ

0

Child класс автоматически получает доступ всех public, protected членов parent и child также имеет отношение к parent класса.

Почему вы хотите пройти parent класс ссылки на Child класс. Вместо этого вы можете вызвать конструктор класса parent из child класса, как это:

public Child(){ 
super() 
} 

Согласно вопрос ниже, мы можем сделать это:

public class Child1 extends Super1 { 
    private int l; 
    public Child1(Super1 s){ 
     super(s); 
    } 
    public Child1(){ 
     this.l=20; 
    } 
} 

public class Super1 { 
    private int k; 
    public Super1(){ 

    } 
    public Super1(Super1 s){ 
     k=s.k; 
    } 
} 
+0

Допустим, у меня уже есть объект существующего человека, но он не был создан в качестве сотрудника, а теперь, если я решил создать экземпляр сотрудника с этим объектом? * Медведь со мной Я просто пытаюсь узнать больше о концепции наследования * –

+0

@SatrughanKumarSingh просто вижу мое редактирование. это отвечает на ваш вопрос? – Trying

+0

Да, это сработало, спасибо за терпение. Я начал программировать из-за замечательной поддержки, которую я вижу в сообществе. Новые ребята, как и мы, будут иногда задавать глупые вопросы, но это во имя обучения, насколько мы можем –

2

Вы получаете доступ ко всем членам класса Person через класс Employee из-за отношений наследования. Вам не нужно передавать родительский объект ребенку.

Передайте все необходимые параметры Employee и вызовите super() из своего конструктора.

//Person constructor 
Person(param1, param2){ 
} 

class Employee extends Person 
//Employee constructor 
Employee(param1, param2){ 
super(param1, param2); 
} 

// New object 
Employee emp = new Employee(param1, param2); 

Также конструктор не возвращает ничего, поэтому удалите пустоту в своем вопросе.

+0

Хорошо, но, допустим, я уже создал объект person, и мне хотелось бы, чтобы класс employee захватывал переменные от этого объекта-объекта , например. Person psn = new Person (...); Сотрудник emp = new Employee (psn, ..., ...); Можно ли это сделать так, чтобы это было возможно? –

+0

Вы можете использовать конструктор копирования для класса Person и вызвать его в конструкторе класса Employee для вашего конкретного случая. – AsG

0

я не вижу логику наследования здесь правильно.

у вас есть ответ already..see ниже

class person() 


class employee extends person(here) 

, следовательно, вы получите доступ к его переменным и методам ..

просто интересно, почему вы должны экземпляр работника и инъекционного человека класс, который уже родитель для сотрудника.

+0

Я смотрел пример, такой же, как ответ, показанный чуть выше этого ответа, где я предложил мне изменить отношения. Поэтому я тестировал, если это возможно в сценарии наследования. Поскольку я довольно новичок в этом, я хотел узнать, почему это может быть избыточным, чтобы сделать это –

+0

с точки зрения java, это не наследование, bcoz java поймет, только если вы будете следовать этим понятиям, как сказано в ответе. Например в вашем тестовом коде вы не можете назначить дочерний класс родительской ссылке. Person (type) employee1 = Employee() .. поскольку вы не определяете отношения между сотрудником и человеком с ключевым словом «extends». ответ, который я вам дал, может это сделать .. –

0

Ваш сотрудник будет работать как человек. Вы можете вызывать каждый метод или переменную (за исключением частных переменных и методов) объекта Person by Employee. Но все же, если вы хотите, чтобы передать объект Person в конструктор класса Employee, то вы можете сделать это, как fallows-

public Employee(Person person,.......){ 
     super();//or pass required parameters according to constructor of Person class 
     //do whatever you want 
    } 

он будет работать отлично.

0

попробовать это:

//if your Person constructor looks like this 
public Person(param1, param2){ 
} 


//then your copy constructor would look like this 
public Employee(Person p){ 
    super(p.getParam1 p.getParam2); 
} 
Смежные вопросы