Наследование и экземпляры Java - PullRequest
0 голосов
/ 30 октября 2018

В пакетах Java: в пакете, где каждый класс имеет свой собственный файл .java, можно ли инициализировать открытый объект родительского класса с помощью объекта дочернего класса с ограниченным пакетом вне их пакет? To-wit: Могу ли я сделать метод в Parent, который инициализирует себя со скрытым дочерним экземпляром?

Я знаю, что "this. New Child ()" работает, но только если child является внутренним классом. Я пытаюсь по-настоящему практиковать правильную инкапсуляцию объектов, поэтому хочу, чтобы дочерние классы оставались скрытыми от всех, кто находится за пределами пакета.

Редактировать: Для дальнейшего разъяснения моего вопроса я добавил initWithAnyChild () в родительский класс и дочерний класс ChildB ().

Для экземпляра:

package righthere;//Parent.java



 public class Parent{

   public Parent(){}


   public void initWithChildA(){ this.new ChildA(); }

   public Parent initWithAnyChild(/*An identifier*/){

       switch(/*identifier*/){

         case /*ChildA*/: return new ChildA();
         case /*ChildB*/: return new ChildB();

         default: break;
        }

       return null;
    }
 }

/ *** /

package righthere;//ChildA.java

 class ChildA extends Parent{

     //Implementation;
  }

/ *** /

package righthere;//ChildB.java

 class ChildB extends Parent{

      //Implementation;


 }

/ *** /

package somewhere;//Test.java

import righthere.*;

public class Test{



   Parent var1.initWithChildA(); //Would not work since ChildA is not an inner class.

   Parent var2 = var2.initWithAnyChild(/*ChildA*/)//Would this work?



  }

 /*Is initWithAnyChild() the better way to go about this? Or is there 
  *an easier way?
  */

1 Ответ

0 голосов
/ 12 ноября 2018

Чтобы ответить на мой вопрос:

Используя мой пример, метод в классе Parent "initWithAnyChild (/ Идентификатор /)" работает, где я могу получить частные подклассы пакета и сохранить его в общедоступной переменной класса Parent ( Полиморфизм) и сможет использовать его вне своей упаковки.

Может быть, мой вопрос был слишком запутанным, чтобы понять, или я не был достаточно ясен? Прошу прощения, это мой первый пост здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...