Главная » Uncategorized » Java доступ и наследование

Java доступ и наследование

Контроль доступа:
public объявление члнеа класса доступно для всех
private  доступ к члену класса не предоставлчется никому(Классы не могут быть такими, если надо запретить создани еобъектов класса
— делайте конструкторы private, токльо вы сами сможете создавать такие объекты класса в статическом методе)
protected  доступ к методам производных классов
(без) — досутп в пределах пакета(не желательно лучше private)А о случаях делать методы класса открытыми — мне сообщит компилятор.

инкапсуляция — сокрытие реализации(контроль над доступом) + помещение данных и методов в классы — в резульяттае появляется тип данных с характеристиками и поведением.

Повторное использование классов.
Два пути использования классов без ущерба для кода

1.объекты уже имеющихся классов просто создаются внутри вашего нового класса.
Механизм построения нового класса из объектов существующих классов называется композицией.
(Используем функциональность нового кода, а не его структуру)

2.Новый класс создаётся как специализация существующего класса. Берём существующий класс за основу и добавляем ему код без изменения существующего класса.
Этот механизм называется наследование.
Синтаксис и поведение типов при использованиия композиции и наследования нередко совпадают.
(так как оба механизма предназначены для построения новых типов на базе существующих)

ссылки инициализировать самостоятельно(в точке определения объекта- перед вызовом конструктора,
вконструкторе,
перед использованием объекта-отложенной инициализацией,
используя инициализации экземпляров)

Если наследования нет явно, то оно автоматически идёт от корневого класса java.Object.
extends — «Этот новый класс похож на тот старый класс»
наследование не просто копирует интерфейс базового класса — когда Вы создаёте объект производного
класса, внутри него содержится п о д о б ъ е к т  базового класса.

композиция и наследование могу сочетаться вместе.

Если в классе должны выполняться действия  по очистке, Вам придётся написать для этого особый метод и сделать так,
чтобы программисты-клиенты знали о необходимости вызова этого метода.

try — определяет начало защищённой секции. В секции finally код выполняется всегда, независимо от того. как произошло выполнение блока try.

Лучше не полагаться на сборщик мусора в ситуациях, где дело не касатеся освобождения памяти.

Если какой-л. из методов базового класса был перегружен несколько раз,
переопределение имени этого метода в производном классе не скроет ни одну из базовых версий.

Перегрузка работает вне зависимости от того, где был определён метод — на текущем уровне или в базовом классе.

На практике при ПЕРЕопределении методов гораздо чаще используется точно такое же описание и список аргументов как и базовом классе.
В J5  появилась запись @Override, Если вы собираетесь переопределить метод, используйте (СОбака)Оверрайд и компилятор выдаст сообщение
об ошибке, если вместо переопределения будет случайно выполнена перегрузка.

Композиция в сравнении с наследованием.
Композиция в основном применяется, когда в новом классе необходимо использовать функциональность уже существующего класса,
но не его интерфейс. Вы встраиваете объект, чтоб юзать его возможности, пользователь класса видит только интерфейс,
не замечая встроенных объектов.
При использовании наследования  вы берете уже существующий класс и создаёте его специализированную версию,
класс общего назначения адаптируетс ядл яконкретной задачи.
Взаимосвязь «является» — выражается наслеованием, Взаимосвязь «имеет» описывается композицией.

PROTECTED — «Член  класса является закрытым(привате) для пользователей класса, но для всех, кто наследуется от класса,
и для соседей по пакету он доступен»

_Восходящее преобразование типов
Самое важное —
не то, что наследование предоставляет методы для нового класса.
а в отношении.
«Новый класс имеет ТИП существующего класса»

final — (для данных методов и классов)»Это нельзя изменить». Обуусловлено эффективностью и архитектурой программы.
-константы — (константа времени компиляции)
-значение инициализируемое во время работы программы, котороые нельзя изменять.
в java нет механизмов, чтобы сделать произвольный обхект неизменным.(тоже самое с массивами) За исключением собственного класса,
оъекты которого фактически являются контсантными.

Любой закрытый private
метод косвенно является final.

Для методов для
1. блокировка, надо удостовериться про неизменное поведение при наследовании
2. Эффективность использование inline. Тут использовани енежелательно

Для классов: Не собираетесь использовать его в качестве базового.
Структура должна оставться постоянной и появление субклассов небезопасно.
финал метод в финал классе не имеет значения(он и так финальный).

Super
Разработчик может взять уже существующий метод базового класса и изменить его.
Возможно, в этом случае потребуется вызвать метод базового класса и изменить его.
Однако в методе method() вы не можете просто вызвать method() — это приведёт к рекурсии,
а нам нужно не это. Для решения проблемы в Java существует ключевое слово super,
которое обозначает «суперкласс», то есть класс производным от которого является текущий класс.

=================================================================

http://ru.stackoverflow.com/questions/136909/%D0%98%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81%D1%8B-%D0%B2-%D0%9E%D0%9E%D0%9F-java-%D0%BF%D0%BE-%D0%BF%D1%80%D0%BE%D1%81%D1%82%D0%BE%D0%BC%D1%83

===============================================================

https://kdiv.wordpress.com/2013/02/21/deadly-diamond-of-death/

================================================================

Вопрос

Какая разница между абстрактным классом и интерфейсом?
Ответ

Абстрактный(Abstract) класс — класс, который имеет хотя б 1 абстрактный (не определенный) метод; обозначается как abstract.

Интерфейс — такой же абстрактный класс,только в нем не может быть свойств и не определены тела у методов.

Так же стоит заметить, что абстрактный класс наследуется(etxends), а интерфейс реализуется (implements). Вот и возникает разница между ними, что наследовать мы можем только 1 класс, а реализовать сколько угодно.
ВАЖНО! При реализации интерфейса, необходимо реализовать все его методы, иначе будет Fatal error, так же это можно избежать, присвоив слово abstract.
Пример:

interface I { 
    public function F(); 
    public function say(); 
} 
 
abstract class A implements I { 
    function say() { 
        echo 'Hello'; 
    } 
    // function F() - не реализована 
} 

===============================================================================

http://www.quizful.net/interview/java/interface-vs-abstract-class

===============================================================================

Главное отличие класса от интерфейса — в том, что класс состоит из интерфейса и реализации.

Четко о соотношении абстрактных классов и интерфейсов написано в документации: http://docs.oracle.com/javase/tutorial/java/IandI/abstract.html.

Отсюда можно добавить:
• Абстрактные классы содержат частичную реализацию, которая дополняется в подклассах. Если в абстрактном классе отсутствует частичная реализация, то вместо него рекомендуется использовать интерфейс.
• Подклассы абстрактного класса схожи между собой в части реализации, унаследованной от абстрактного класса, и отличаются в части своей реализации абстрактных методов.

==============================================================================

https://habrahabr.ru/post/30444/

===============================================================================

Что касается Java, то разница — состоит и в том, что класс может реализовать много интерфейсов (но тогда необходимо определить все методы этих интерфейсов, коих может быть много), а наследоваться может только от одного класса.

Далее — флейм на тему прелести интерфейсного подхода, и о недостатках наследования реализации. Но это уже совсем другая история…

===============================================================

Имел ввиду следуюущие:

abstract class AClass
{
   abstract void doThis();
   void doThat(){
       //Реализация
   }
}

VS

interface IFace
{
  void doThis();
  void doThat();
}

//Что характерно: нет абстрактных методов (явно).
abstract class AClass implements IFace
{ 
   void doThat(){
       //Реализация по умолчанию
   }
}

Абстрактный класс содержит по крайней мере один абстрактный метод (остальные методы могут быть нормальными).

интерфейс по определению не содержит «не-абстрактных» методов.
=====================================================================
Интерфейс — это описание того, как можно выполнить какое-то действие. У него не может быть свойств и он не может ничего делать сам, но он делает очень важную задачу — говорит — как можно вызвать какое-то действие, чтобы получить результат.

В программировании такое часто называют протоколом. Интерфейс определяет протокол взаимодействия, но не его реализацию. А зачем нужен протокол без реализации? Он очень нужен и давайте посмотрим на некоторые случаи — где и когда он может пригодится.
=====================================================================
Интерфейс представляет из себя класс, в котором все поля static и final, а все методы абстрактные.
Для того чтобы описать интерфейс, используется ключевое слово interface вместо class:
==========================================================================
Interface используют тогда, когда у нас есть несколько реализаций.
—————
перед каждой реализацией метода стоит ключевое слово @Override,

Реклама

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s