powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Вопрос о наследовании
13 сообщений из 13, страница 1 из 1
Вопрос о наследовании
    #38799509
Ulcigor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый вечер уважаемые форумчане.
Возник вопрос по наследованию.

Имеется интерфейс и две имплементации этого интерфейса. Допустим классы A и B. При инициализации класса A и класса B, необходимо присвоить классу A класс B. Вопрос собственно в том, как это сделать? При попытке такое провернуть вполне ожидаемо, что java выкидывает Exeption java.lang.ClassCastException с описанием cannot be cast to

Вот примерв кода:

Код: java
1.
2.
3.
4.
public interface Session {
    public String getName();
    public void setName(String name);
}


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public class Websocket implements Session {
    private String name;
    
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public class CWebsocket implements Session {
    private Integer id;
    
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
}


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
public class Test {
    public static void main(String [] args) {
        Websocket websocket =  new Websocket();
        websocket.setName("test");

        CWebsocket cWebsocket = (CWebsocket) websocket;
        System.out.println(cWebsocket.getName());
    }
}


Заранее большое спасибо за внимание к проблеме.
...
Рейтинг: 0 / 0
Вопрос о наследовании
    #38799514
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Работайте с типом интерфейса, а не типами конкретных реализаций.
...
Рейтинг: 0 / 0
Вопрос о наследовании
    #38799521
Ulcigor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. Sidorov,

Также пытался это сделать, но к содалению результат тот же, это обусловлено конкретной реализацией.
Т.е Socket websoket = (Socket) new Websoket(); уже обусловлен конкретной реализацией и семантика реализации свойственна для Websoket, отсюда cWebsoket != websoket
Суть в том, что я ранее не работал с такой архитектурой, потому реализация может и есть, просто я не знаю о ней. ))
...
Рейтинг: 0 / 0
Вопрос о наследовании
    #38799527
mr_virtus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ulcigor,

авторИмеется интерфейс и две имплементации этого интерфейса.

Код: java
1.
2.
3.
4.
public interface Session {
public String getName();
public void setName(String name);
}



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public class CWebsocket implements Session {
private Integer id;

public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}



У вас ошибка уже здесь. Класс CWebsocket не реализует интерфейс Session, для реализации он должен реализовать методы интерфейса.
...
Рейтинг: 0 / 0
Вопрос о наследовании
    #38799529
mr_virtus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ulcigor,

так же:

Код: java
1.
2.
3.
4.
public interface Session {
public String getName();
public void setName(String name);
}



All abstract, default, and static methods in an interface are implicitly public, so you can omit the public modifier.

https://docs.oracle.com/javase/tutorial/java/IandI/interfaceDef.html
...
Рейтинг: 0 / 0
Вопрос о наследовании
    #38799532
Ulcigor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mr_virtus,

Да, ошибка действительно есть, спасибо, но если абстрагироваться от этого и попробовать реализовать "правильный" объект, результат будет тотже.
...
Рейтинг: 0 / 0
Вопрос о наследовании
    #38799541
mr_virtus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ulcigor,

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

а для чего это нужно?

Нельзя объекты создавать с типом интерфейса Session?
...
Рейтинг: 0 / 0
Вопрос о наследовании
    #38799554
Ulcigor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mr_virtus,

Суть в том, что я бы хотел расширить класс org.apache.tomcat.websocket.WsSession который является наследником javax.websocket.Session
В реализацию Сервлета метод onOpen приходит реализованый класс org.apache.tomcat.websocket.WsSession семантика onOpen = public void onOpen(javax.websocket.Session session) throws Exception;
Мне это нужно для того, чтобы добавить свойство объекта описывающее пользователя, в основном нужно для авторизации пользователей в websocket
...
Рейтинг: 0 / 0
Вопрос о наследовании
    #38799560
mr_virtus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ulcigor,

не очень понял, что значит "свойство объекта, описывающего пользователя".

через session то нельзя это сделать?

сессия же для пользователя определяется.
...
Рейтинг: 0 / 0
Вопрос о наследовании
    #38799566
Ulcigor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mr_virtus,

Совершенно верно, только мне нужно добавить пользователя в сессию для того, чтобы сопрячь сессию с идентификатором пользователя на сайте.
т.е имеется класс описывающий пользователя:

public class User {
private Integer id;
private String fn;

public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getFn() {
return fn;
}
public void setFn(String fn) {
this.fn = fn;
}
public Session getSession() {
return session;
}
public void setSession(Session session) {
this.session = session;
}
}

который необходимо довавить в org.apache.tomcat.websocket.WsSession. Я это пытаюсь реализовать наследованием, но пока терплю неудачу ))
...
Рейтинг: 0 / 0
Вопрос о наследовании
    #38799570
mr_virtus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ulcigor,

я свое время связывал пользователя с сессией через setAttribute. Но я работал с HttpSession.
...
Рейтинг: 0 / 0
Вопрос о наследовании
    #38799855
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Вопрос о наследовании
    #38799856
Ulcigor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. Sidorov, mr_virus,
Огромное спасибо за разъяснение, по-моему это то, что нужно.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Вопрос о наследовании
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]