powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / O o = new C();
9 сообщений из 9, страница 1 из 1
O o = new C();
    #39634050
mavrodi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток

Не могу осмыслить нижеописанную строчку( Не могу понять почему разные классы при создании экземпляра объекта?

O o = new C();

Подскажите где можно прочитать?

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
package OOP.jClass;

import java.time.LocalTime;

interface O {
    void read();
}

class A implements O {
    public A() {
        System.out.println(LocalTime.now() + " Constructor class A");
    }

    @Override
    public void read() {
        System.out.println(LocalTime.now() + " A.read()");
    }
}

class B extends A {
    public B() {
        System.out.println(LocalTime.now() + " Constructor class B");
    }


    @Override
    public void read() {
        System.out.println(LocalTime.now() + " B.read()");;
    }
}

class C extends B {
    public C() {
        System.out.println(LocalTime.now() + " Constructor class C");
    }


    @Override
    public void read() {
        System.out.println(LocalTime.now() + " C.read()");
    }
}

public class jClass {
    public static void main(String[] args) {
        B b = new B();
        C c = new C();
        O o = new C();

        b.read();

        c.read();

        o.read();

        System.out.println(o.getClass());
        System.out.println(c.getClass());

        System.out.println(o==c);
    }
}
...
Рейтинг: 0 / 0
O o = new C();
    #39634051
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mavrodiНе могу осмыслить нижеописанную строчку( Не могу понять почему разные классы при создании экземпляра объекта?
Код: sql
1.
O o = new C();

Подскажите где можно прочитать?
Код: java
1.
2.
3.
class A implements O
class B extends A
class C extends B

Класс C (косвенно) наследует реализацию интерфейса O из класса-предка A.
...
Рейтинг: 0 / 0
O o = new C();
    #39634058
mavrodi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е. класс С будет иметь структуру класса А, его методы и свойства?
...
Рейтинг: 0 / 0
O o = new C();
    #39634065
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С будет иметь свои методы и свойства которые ты перегрузил (override).
Но видеть мы его будем сквозь интерфейс O в котором один единственный метод.
...
Рейтинг: 0 / 0
O o = new C();
    #39634068
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильнее так, что хотя объект o ссылается на класс C, эту ссылку мы "видим" типом интерфейса O.
Но, при желании, можем сделать явное приведение ко всем классам из иерархии наследования класса C.
...
Рейтинг: 0 / 0
O o = new C();
    #39634069
mavrodi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton, что значит видеть?

Вопрос появился после изучения паттерна Декоратор
...
Рейтинг: 0 / 0
O o = new C();
    #39634070
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То и значит.
Предположим, что нам требуется реализовать некий интерфейс:
Код: java
1.
2.
3.
interface Требования {
  void нужныйМетод();
}

При этом уже есть некий клас, который предоставляет полную или частичную реализацию этого интерфейса:
Код: java
1.
2.
3.
class Реализация {
  void подходящийМетод() { /* подходящая реализация */ }
}

Тогда, чтобы сократить себе работу:
Код: java
1.
2.
3.
class Ленивец extends Реализация implements Требования {
  public void нужныйМетод() { подходящийМетод(); }
}

Теперь можно использовать наш класс всюду, где требуется реализуемый интерфейс:
Код: java
1.
Требования объект = new Ленивец();
...
Рейтинг: 0 / 0
O o = new C();
    #39634071
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mavrodimayton, что значит видеть?

Вопрос появился после изучения паттерна Декоратор
У меня нет других метафор. Видеть. Иметь доступ. Доступаться.

По честному, тебе еще рано изучать Декоратор. Нельзя из основ ООП прыгнуть в шаблоны.
Ну ... мотивацию к использованию ты все равно не поймешь. Ты можешь понять определение
которое пишет википедия. Но принять правильно решение о том когда в проекте это задействовать
ты не сможешь.

Сосредоточся на основах ООП и на алгоритмах.
...
Рейтинг: 0 / 0
O o = new C();
    #39634072
mavrodi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо большое
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / O o = new C();
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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