2015-09-07 5 views
1

У меня есть классы java track и Session.Java - условный доступ к методам класса

Класс следа ...

package trackmanagement; 

public class track { 

    private String trackName, networkingEventTime; 
    private Session morningSession, afternoonSession; 

    track(String name) 
    { 
     trackName = name; 
    } 

    public void alloteSession() 
    { 
     morningSession = new Session("Morning Session", trackName); 
     afternoonSession = new Session("Afternoon Session", trackName); 
    } 
} 

Класс Session ...

package trackmanagement; 

import java.util.ArrayList; 

public class Session { 

    private String sessionName, relatedTrack, startTime, endTime; 
    private ArrayList<Slot> allotedSlots; 

    public Session(String name, String track) 
    { 
     sessionName = name; 
     relatedTrack = track; 
    } 

    public void morningSlots() 
    { 

    } 

    public String afternoonSlots() 
    { 
     return ""; 
    } 
} 

В методе alloteSession в классе track, я делаю два объекта класса Session с именами morningsession и afternoonsession.

Класс Session содержит два метода, а именно: morningSlots и afternoonSlots.

Я хочу только morningSlots способа получить доступ из morningsession объекта, а afternoonSlots является частным для morningsession объекта.

Аналогично, afternoonSlots метод должен быть доступен с afternoonsession объекта, а morningSlots является частным для afternoonsession объекта.

Таким образом, для методов должна быть условная конфиденциальность. Метод morningSlots должен быть общедоступным для объекта morningsession, тогда как он должен быть закрыт для объекта afternoonsession и наоборот.

Возможно ли это, если нет, предложите другой способ реализации такого дизайна.

+5

Нет, в Java нет ничего подобного. Я предлагаю вам только один метод ('slots()') или аналогичный, и пусть каждый сеанс знает, какие слоты доступны. Это избавляет вас от этой проблемы дизайна и, как правило, гораздо более гибкой, чем жесткая структура «утром или днем». –

+1

Вместо того, чтобы идти по вышеуказанной сложной логике, вы можете просто раздвоить логику сеанса в классе сеанса, который будет отвечать за восприятие в зависимости от времени, например, morninig или после полудня. like Track magnt -> getSession -> Получить сеанс проверит время и вернет сессию соответственно .. – Harish

ответ

4

Вместо того, чтобы пытаться изменить видимость метода из того или иного класса, можно создать 2 класса morningSession & afternoonSession, который будет распространяться session. session может быть абстрактным классом с использованием метода slots(), который должен быть реализован в morningSession & afternoonSession. С точки зрения реализации при создании session S это либо morningSession или afternoonSession, но в обоих случаях вы можете вызвать метод slots() который будет ссылаться на правильный метод

1

Вы должны изменить свой дизайн вместо того, чтобы пытаться что-то, что не возможно в Java :)

public abstract class Session { 
     public abstract String getSlots();{//try to have methods that describes a verb/action 
    } 


    public class MorningSession extends Session{ 
     public abstract String getSlots(){ 
     return "Morning slot received"; 
     } 
    } 

    public class AfternoonSession extends Session{ 
     public abstract String getSlots(){ 
     return "Afternoon slot received"; 
     } 
    } 

делая это, вы заключаете реализацию, и пусть ваш ребенок Классы Утро/AfternoonSession, чтобы получить необходимые слоты.

Смежные вопросы