Что происходит, когда объект подкласса назначается как объект суперкласса

В Oracle, (+) обозначает «необязательную» таблицу в JOIN. Поэтому в вашем запросе

select  a.id, b.id, a.col_2, b.col_2, ...
from a,b
where a.id=b.id(+)

это таблица LEFT OUTER JOIN 'b' с таблицей «a». Как современный запрос левого соединения. (он вернет все данные таблицы «a», не теряя своих данных, с другой стороны, необязательная таблица «b» может потерять свои данные)

select  a.id, b.id, a.col_2, b.col_2, ...
from a
Left join b ON a.id=b.id

ИЛИ

select  a.id, b.id, a.col_2, b.col_2, ...
from a
Left join b using(id)

теперь, если вы удалите (+), то это будет обычный запрос внутреннего соединения,

select  a.id, b.id, a.col_2, b.col_2, ...
from a,b
where a.id=b.id

он будет только возвращает все данные, где «a» и «amp; Значение 'b' tables 'id' равнозначно, означает общую часть.

Дополнительно: если вы хотите сделать свой запрос как правое соединение в более старом формате или в современном формате, то оно будет выглядеть, как показано ниже:

Old:

select  a.id, b.id, a.col_2, b.col_2, ...
from a,b
where a.id(+)=b.id

Modern:

select  a.id, b.id, a.col_2, b.col_2, ...
from a
Right join b ON a.id=b.id

ИЛИ

select  a.id, b.id, a.col_2, b.col_2, ...
from a
Right join b using(id)

Ref & amp; help:

https://asktom.oracle.com/pls/asktom/f?p=100:11:::::P11_QUESTION_ID:6585774577187

Left Outer Join с использованием знака + в Oracle 11g

https://www.w3schools.com/sql/sql_join_left.asp

1
задан din abarbanel 31 March 2019 в 12:54
поделиться

2 ответа

Ничего не происходит. Объект, на который ссылается переменная 'b', является отдельным объектом. Это в то же время экземпляр B и экземпляр A.

Когда вы выполняете присвоение a = b, объект, на который ранее ссылалась переменная «а», становится недоступным. Рассмотрение этого старого объекта не входит в это обсуждение.

После назначения «a» и «b» относятся к одному и тому же объекту. Объект неизменен. Это все еще экземпляр B и экземпляр A.

Возможно, блок в вашем понимании - это различие между объектами и переменными, которые относятся к этим объектам?

0
ответ дан another-dave 31 March 2019 в 12:54
поделиться
1129 Это простое задание. = является оператором присваивания.

Давайте не будем обращать внимания на следующие пункты.

  1. В Java, когда объект создан и доступен через. ссылка. Ссылка ссылается на объект.
  2. Одновременно одна ссылка может ссылаться только на один объект.
  3. Ссылка типа X может ссылаться на объект типа X или любые подтипы (расширение в случае, если X является классом или реализацией если X является интерфейсом).

Теперь предположим, что есть два класса Super и Sub такие, что Sub extends Super.

 SuperClass reference = new SubClass();  

Это разрешено, поскольку подкласс наследует от суперкласса. Выше у нас есть объект типа SubClass, созданный в куче, и он доступен через. ссылка с именем reference

Обратите внимание, что ссылка типа SubClass не может ссылаться на объект из SuperClass. Посмотрим вкратце, почему так? Если бы ссылка типа SubClass позволяла ссылаться на Объект типа SuperClass, тогда было бы разрешено вызывать дополнительные методы (функции), определенные в SubClass (SubClass унаследовала бы все методы из SuperClass и также определил бы несколько дополнительных методов). Теперь это привело бы к сбою приложения, поскольку у объекта SuperClass есть только методы, определенные в SuperClass, но нет дополнительных методов, определенных в SubClass. Следовательно, компилятор предотвращает это во время компиляции. Это ошибка времени компиляции, чтобы иметь ссылку типа SubClass, ссылающуюся на объект типа SuperClass

Теперь давайте посмотрим на код, как упомянуто в строке

 SuperClass a = new SuperClass();
 SubClass b = new SubClass();
 a = b; 

1: У нас есть объект SuperClass, на который ссылается переменная типа SuperClass с именем a

Строка 2: У нас есть объект SubClass, на который ссылается переменная типа SubClass с именем b

Строка 3: у нас есть назначение, в котором a назначено для ссылки на тот же объект, что и в b. Итак, теперь у нас есть обе ссылки, ссылающиеся на объект типа SubClass, созданный в строке 2. Объект typer SuperClass, созданный в строке 1 (с текущим доступным кодом, упомянутым в вопросе), не имеет каких-либо ссылок, поэтому он пригоден для сбора мусора.

0
ответ дан marc_s 31 March 2019 в 12:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: