Как вернуть родительский класс в Java - PullRequest
0 голосов
/ 10 октября 2011

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

Ответы [ 4 ]

2 голосов
/ 10 октября 2011

Вы можете думать о «супер» для ключевого слова, но это не соответствует тому, что вы описываете.

Родительский класс не является особенным в Java:

class Parent
{
}

class Child extends Parent
{
    Parent foo()
    {
        return (new Parent());
    }
}
2 голосов
/ 10 октября 2011

как насчет использования super ();

1 голос
/ 10 октября 2011

Приятной особенностью полиморфизма является то, что каждый экземпляр дочернего типа также является экземпляром родительского типа.Все они «возвращают объект родительского типа»;

class Parent
{
  ... stuff
}

class Child extends Parent
{
  Parent newParent1()
  {
    return this;
  }

  Parent newParent2()
  {
    return new Child();
  }

  Parent newParent3()
  {
    return new Parent();
  }
0 голосов
/ 10 октября 2011

Я не знаю, зачем вам это нужно. Вы можете просто вернуть новый экземпляр потомка и привести его к родителю. Это должно работать. Если у вас есть переопределенные методы или что-то в этом роде, и вы хотите иметь доступ к родительским методам, это другая проблема. В противном случае вы можете просто upcast:

Child child = new Child();
Parent parent = child;

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

Поскольку parent ссылается на объект типа Child, вы можете привести его обратно к Child. Это называется downcasting, потому что вы приводите объект к классу по иерархии наследования. Даункастинг требует, чтобы вы записали дочерний тип в скобках. Например:

Child child2 = (Child) parent;

Если вам нужно иметь возможность получить экземпляры родителя, тогда, как кто-то рекомендовал, просто попросите вашего ребенка return new Parent().

...