Недавно друг сказал, что хочет сказать, что недавно изучает Java. Он все еще не понимал, ориентированные на объектно-ориентированные языки программирования. Чтобы помочь ему «преобразовать» быстрее, я написал эту статью. Потому что с уровня надстройки. Идеи всех объектно-ориентированных языков программирования похожи, и эти три характеристики являются столпами в мышлении. Затем я сосредоточусь на объяснении трех основных характеристик Java.
Объектно-ориентированный язык программирования имеет три основные особенности: «инкапсуляция», «наследование» и «полиморфизм».
Упаковка
В объектно-ориентированном программировании инкапсуляция (инкапсуляция) является буквально смыслом упаковки, что означает использование абстрактных типов данных для инкапсуляции данных и операций на основе данных вместе, что делает их неотъемлемым независимым объектом. Фактически, это заключается в том, чтобы инкапсулировать методы и данные, необходимые для запуска объекта в программе для публикации своего интерфейса. Данные защищены внутри абстрактного типа данных, максимально скрывая внутренние детали, и сохраняя лишь некоторые внешние интерфейсы, чтобы связаться с внешними. Другими словами, пользователю не нужно знать детали внутри объекта (конечно, нет возможности узнать это), но объект можно получить через интерфейс, предоставленный объектом снаружи. С точки зрения непрофессионала, другие объекты, прикрепленные к этим интерфейсам, не должны заботиться о реализации объекта для использования этого объекта. Концепция: «Не говори мне, как ты это сделал, просто сделай это».
Следовательно, инкапсуляция приватизирует свойства объекта и предоставляет некоторые методы атрибутов, к которым можно получить доступ внешним миром. Если мы не хотим получить доступ к внешнему миру, нам не нужно предоставлять методы для доступа внешнего мира. Но если класс не предоставляет методы внешнему миру для доступа, то этот класс не имеет никакого значения.
Например, мы рассматриваем объект как дом, а прекрасные обои внутри, такие как диваны, телевизоры, кондиционеры и т. Д., Все являются частными атрибутами дома, но если нет покрытия стен, то нет никакой конфиденциальности! Именно из -за блокирующей стены мы можем не только иметь свою собственную конфиденциальность, но и изменить внутренние украшения по желанию, не затрагивая других. Но если нет дверей и окон, в чем смысл плотно обернутый черный ящик? Поэтому другие также могут увидеть пейзаж внутри через двери и окна. Следовательно, двери и окна - это интерфейсы, оставленные объектом дома для внешнего мира.
Как правило, частный модификатор должен быть добавлен перед атрибутом в классе. Затем определите методы Getter и Setter. Затем объекты в нашей основной функции больше не могут напрямую вызывать свойства и могут быть вызваны только методами Getter и Setter.
Три преимущества упаковки
1. Хороший пакет может уменьшить связь.
2. Структура внутри класса может быть свободно изменена.
3. может быть дано более точный контроль над членами.
4. Скрыть информацию и реализовать детали.
Модификатор
Прежде всего, вам нужно понять, что такое модификатор. Модификаторы доступа могут использоваться для изменения объема доступа атрибутов и методов.
В объектно-ориентированном процессе мы используем контроль разрешений для добавления разрешений в инкапсулированный класс для ограничения манипулирования посторонними классом, чтобы обеспечить безопасность данных и методов в классе. Можно сказать, что класс - это логическая сущность, которая инкапсулирует связанные атрибуты и методы. Для определенных свойств или методов в объекте они могут быть частными и не могут быть доступны внешним миром. Это также может быть обмен и может быть доступен любым посторонним. Таким образом, объекты обеспечивают различные уровни защиты для внутренних данных, чтобы не допустить, чтобы не связанные части программы не были случайно меняющимися или используют частные части объекта неправильно, что приводит к возникновению ненужных ошибок в программе.
Модификаторы в Java являются общедоступными, защищенными, дефолтными и частными. Это показывает объектно-ориентированную инкапсуляцию, и мы должны стараться изо всех сил, чтобы минимизировать разрешения, чтобы улучшить безопасность.
Как показано на рисунке, он представляет собой область доступа различных модификаторов доступа, таких как свойства или методы, модифицированные частными, к которым можно получить только доступ или использовать в этом классе. Если модификатор не добавляется, по умолчанию по умолчанию, и к нему можно получить доступ и использовать по умолчанию в текущем классе и в том же пакете.
Доступ к разрешениям классы класс Bun Подкласс другие пакеты
общественный ∨ ∨ ∨ ∨
Защитите ∨ ∨ × ×
по умолчанию ∨ × ×
Приватный ∨ × × ×
Если перед атрибутом не добавляется модификатор, разрешение по умолчанию по умолчанию по умолчанию. Мы можем напрямую изменить значение атрибута, создав объект, и характеристики инкапсуляции не отражаются. Это не безопасно в программировании, поэтому нам нужно использовать инкапсуляцию для улучшения нашего кода.
Пример модификаторов
Во -первых, мы определяем четырех класса, родителя, учителя, ученика и сравниваем различия между другими пакетами, подклассами, пакетами и этим классом. Диаграмма местоположения каждого класса показана.
пакет com.java.test; public Class Person {public String name = "Zhang San"; public void InterviceSeff () {System.out.println (имя); }}Имя публично. Если в компиляции нет ошибок, это означает, что общественная переменная имеет доступ к этому классу.
пакет com.java.test; студент открытого класса {person p = new Person (); public void test () {System.out.println (p.uname); }}Студент и человек в том же пакете. Если в компиляции нет ошибок, это означает, что у переменной есть права доступа в одном и том же пакете.
пакет com.java.test1; import com.java.test.person; учитель публичного класса расширяет человека {public int ровь; Человек p = новый человек (); public void test1 () {System.out.println (p.uname); }}Студент и человек не в том же пакете, но учитель наследует урок человека. Если в компиляции нет ошибок, это означает, что переменная имеет права доступа в подпакете.
пакет com.java.test1; import com.java.test.person; public class name name uname = "хаха"; Человек p = новый человек (); public void test2 () {System.out.println (p.uname); }}Родитель и человек не в том же пакете. Если в компиляции нет ошибок, это означает, что у переменной нет разрешений на доступ.
После приведенного выше теста, если все они могут быть скомпилированы и переданы, это означает, что классы, модифицированные с публикой, могут получить доступ к друг другу в этом классе, в том же пакете, подклассе и других пакетах.
Мы также начали проверять проблему защищенного разрешения. Если человек, учитель и ученик могут компилировать и пройти, это означает, что классы, измененные с помощью защищенных, могут получить доступ к друг другу в этом классе, в том же пакете и подклассах. Если родитель не компилируется и не проходит, это означает, что защищенные не могут получить доступ к друг другу в классах без отношений наследования вне пакета.
Также начните тестировать проблему с разрешением по умолчанию. Если человек и студент могут компилировать и пройти, это означает, что классы, измененные по умолчанию, могут получить доступ к друг другу в этом классе, в том же пакете и подклассах. Сопровождение родителей и учителя без прохождения класса родителей и учителей не может получить доступ к друг другу независимо от того, существуют ли отношения наследования.
Мы также начали проверять частную проблему разрешения. Если человек может быть скомпилирован и прошел, это означает, что классы, модифицированные частными, могут получить доступ к друг другу в этом классе, в том же пакете и подклассах. Родитель, учитель и ученик не могут компилировать, не проходя частное, чтобы указать, что классы, измененные с помощью частного, могут быть доступны только в этом классе.
Как правило, частные модификаторы должны быть добавлены перед атрибутами в классе. Затем определите методы Getter и Setter. Затем объекты в нашей основной функции больше не могут напрямую вызывать свойства и могут быть вызваны только методами Getter и Setter.
Сумка
Позвольте мне сказать вам функцию сумки
Иногда, когда вы встречаете имя класса программы, может быть продублировано, мы можем использовать концепцию пакета для решения нашей проблемы. Цель пакета - управлять файлами Java и разрешение конфликтов файлов с тем же именем. Это похоже на гардероб. Есть ли у нас разные перегородки и ящики в гардеробе? Мы размещаем одежду отдельно в разные категории, что более благоприятно для нашего руководства.
Чтобы определить пакет, мы используем ключевое слово пакета, а также имя нашего пакета.
Пакет com.java.test; // Примечание: он должен быть размещен в первой строке исходной программы, и имя пакета может быть разделено «». знак. Спецификация именования пакета написана всеми строчными буквами.
Обычно используемые пакеты в системе Java
Java. (Function). (Class) java.lang. (Class) содержит основы Java Language Java.Util. (Class) содержит различные классы инструментов в языке Java.io. (класс) содержит классы, связанные с вводом и выводом
Чтобы использовать класс в другом файле в разных пакетах, вам необходимо использовать ключевое слово импорта. Например, импорт com.java.test1.test.java. В то же время, если импортировать com.java.test1*, импортируйте все файлы в пакет.
это ключевое слово
1. Есть три основных приложения этого ключевого слова:
(1) это вызывает атрибуты в этом классе, то есть переменные элемента в классе;
(2) это вызывает другие методы в этом классе;
(3) Это вызывает другие конструкторы в этом классе и должно быть помещено в первую строку конструктора при вызове.
Public Class Student {public Student (String name) {// Определить конструктор с формальными параметрами} public Student () {// Определить метод, имя такое же, как и класс, так что это конструктор ("Привет!"); } String name; // Определите имя переменной элемента private void setName (string name) {// определить параметр (локальная переменная) имя this.name = name; // Передайте значение локальной переменной к переменной элемента}}Как и в приведенном выше коде, в методе есть формальный параметр, и в методе есть формальный параметр, и имя также является именем. Затем значение формального имени параметра передается в имя переменной элемента в методе.
Ключевое слово, которое представляет переменные члена или методы в объекте. То есть, если с этим ключевым словом добавлена переменная, она относится к переменной элемента или методу объекта, а не к формальным параметрам или локальным переменным методу элемента. По этой причине, в приведенном выше коде, это имя представляет собой переменную члена в объекте, также известную как свойства объекта, и имя, посвященное, является формальным параметром метода. Код this.name = Имя должно передавать значение формального параметра в переменную члена.
Если в классе есть несколько конструкторов, потому что их имена одинаковы и такие же, как и имя класса, то какой конструктор это называется? На самом деле, это то же самое, что и другие методы для обозначения конструкторов, и они вызываются через формальные параметры. Как и в приведенном выше примере, если параметр добавляется после этого ключевого слова, это означает, что он относится к конструктору с параметрами. Если сейчас есть три метода строительства, а именно, нет параметров, один параметр и два параметра. Затем компилятор Java определит, какой конструктор вызовет на основе количества пройденных параметров. Как видно из приведенного выше примера, это ключевое слово можно использовать не только для ссылки на переменные члена, но и для эталонных конструкторов.
Внутренний класс
Внутренний класс очень легко понять снаружи. Внутренний класс - это разместить определение одного класса в определение другого класса. Конечно, соответствует этому, класс, содержащий внутренний класс, называется внешним классом.
Многие новички обязательно спросят, почему один класс должен быть определен в другом классе?
Иногда в нашем программировании возникают некоторые проблемы, которые трудно решить, используя интерфейсы. В настоящее время мы можем использовать способность, предоставляемую внутренними классами, для наследства нескольких конкретных или абстрактных классов для решения этих задач программирования. Можно сказать, что интерфейсы решают только некоторые проблемы, в то время как внутренние классы делают решение множественного наследования более полным.
Существует предложение в «Think in Java»: наиболее привлекательная причина использования внутренних классов заключается в том, что каждый внутренний класс может независимо наследовать реализацию (интерфейс) независимо, поэтому, независимо от того, унаследовал ли перифельный класс определенная реализация (интерфейс), не влияет на внутренний класс.
Общедоступный интерфейс отец {} public interface мать {} открытый класс Сон реализует отец, мать {} открытый класс дочерний реализует отец {class Mother_ реализует мать {}}Внутренние функции класса
1. Внутренний класс может использовать несколько экземпляров, каждый экземпляр имеет свою собственную информацию о состоянии и не зависит от другой информации о периферическом объекте.
2. В одном периферическом классе несколько внутренних классов могут реализовать один и тот же интерфейс по -разному или наследовать один и тот же класс.
3. Момент при создании объекта внутреннего класса не зависит от создания объектов периферического класса.
4. В внутреннем классе нет запутанных отношений «is-a», это независимая сущность.
5. Внутренний класс обеспечивает лучшую инкапсуляцию, а другие классы не могут быть доступны, кроме периферического класса.
пакет com.java.test; открытый класс outterclass {private String name; частный int возраст; public String getName () {return name; } public void setName (string name) {this.name = name; } public int getage () {return Age; } public void setage (int age) {this.age = age; } public void display () {System.out.println ("Дисплей OUTERCLASS называется"); } public Class innerClass {public innerClass () {name = "chenssy"; возраст = 23; } public overclass getOUterClass () {return outterclass.this; } public void display () {System.out.println ("name:" + getName () + "; Age:" + getage ()); }} public static void main (string [] args) {overclass overclass = new overclass (); Overclass.innerclass innerclass = overclass.new innerclass (); innerClass.display (); innerClass.getOouterClass (). Display (); }} имя: chensy; возраст: 23Отображение Overclass называется
Мы должны прояснить, что внутренние классы являются концепцией времени компиляции. После успешного составления они принадлежат к двум совершенно другим классам от периферийных классов (конечно, они все еще связаны).
Мы также видим, как ссылаться на внутренний класс: ссылаясь на внутренний класс, нам нужно указать тип этого объекта: overclasname.innerclassname. В то же время, если нам нужно создать объект внутреннего класса, мы должны использовать внешний объект класса для создания внутреннего класса через.
В то же время, если нам нужно сгенерировать ссылку на внешний объект класса, мы можем использовать overclassname. Это, чтобы мы могли правильно сгенерировать ссылку на внешний класс.
В Java внутренние классы в основном разделены на внутренние классы участников, локальные внутренние классы, анонимные внутренние классы и статические внутренние классы.
Участник внутренний класс
Внутренний класс участника также является наиболее распространенным внутренним классом. Он является членом периферийного класса, поэтому он может без ограничений получить доступ ко всем атрибутам члена и методам периферийного класса. Хотя он является частным, если периферический класс хочет получить доступ к атрибутам участника и методам внутреннего класса, ему необходимо получить доступ через экземпляр внутреннего класса.
Два пункта следует обратить внимание во внутреннем классе членов.
Не может быть никаких статических переменных и методов во внутреннем классе члена;
Внутренние классы участников прикреплены к периферийным классам, поэтому внутренние классы могут быть созданы только в том случае, если первые периферийные классы созданы в первую очередь.
открытый класс outterclass {private String Str; public void outterdisplay () {System.out.println ("overclass ..."); } public Class innerClass {public void innerDisplay () {// Использовать атрибут str в периферийном str = "chenssy ..."; System.out.println (str); // Использование метода outterdisplay (); }} /*Рекомендуется использовать getxxx () для получения внутренних классов членов, особенно когда конструктор внутреннего класса не имеет параметров* / public innerclass getInnerClass () {return newnnerClass (); } public static void main (string [] args) {overclass over = new overclass (); Overclass.innerclass inner = over.getinnerClass (); inner.innerDisplay (); }}Я лично рекомендую использовать getxxx (), чтобы получить внутренний класс члена, особенно когда конструктор этого внутреннего класса не имеет параметров.
Предложение локальное внутреннее занятие
Местные внутренние классы вложены в методы и области. Использование этого класса в основном для применения и решения относительно сложных задач. Я хочу создать класс, чтобы помочь нашему решению. В то время я не хочу, чтобы этот класс был публичным, поэтому мы можем создавать местные внутренние классы.
Местные внутренние классы составлены как внутренние классы участника. Они могут быть использованы только в этом методе и атрибуте. Если они не находятся в этом методе и атрибуте, они будут недействительными.
Определено в методе:
Public Class Parcel5 {Публичное назначение назначения (String Str) {класс Pdesionation реализует Destion {Private String Label; Private Pdesion (String Wheseto) {label = whereTo; } public String readlabel () {return label; }} вернуть новое Pdesion (str); } public static void main (string [] args) {parcel5 parcel5 = new parcel5 (); Destion D = Parcel5.destionation ("Chensy"); }}Определено в рамках:
public parcel6 {private void InternalTracking (Boolean B) {if (b) {Class TrackingsLip {private String Id; TrackingsLip (String S) {id = s; } String getSlip () {return id; }} TrackingsLip ts = new TrackingsLip ("chenssy"); String string = ts.getslip (); }} public void track () {InternalTracking (true); } public static void main (string [] args) {parcel6 parcel6 = new parcel6 (); parcel6.track (); }}Анонимный внутренний класс
открытый класс outterclass {public innerclass getInnerClass (final int num, string str2) {return new innerclass () {int number = num + 3; public int getNumber () {return №; }}; / * Примечание: полуколоны не могут сохранить */} public static void main (string [] args) {outterclass out = new overclass (); Innerclass inner = out.getinnerclass (2, "chensy"); System.out.println (inner.getNumber ()); }} интерфейс innerclass {int getNumber ();}1. Анонимные внутренние классы не имеют модификаторов доступа.
2. Новый анонимный внутренний класс, этот класс должен существовать первым. Если мы прокомментируем этот интерфейс внутреннего класса, возникнет ошибка компиляции.
3. Обратите внимание на формальные параметры метода GetInnerClass (). Первый формальный параметр модифицируется окончательным, а второй - нет. В то же время мы также обнаружили, что второй формальный параметр не использовался в анонимном внутреннем классе, поэтому, когда формальный параметр метода должен использоваться анонимным внутренним классом, этот формальный параметр должен быть окончательным.
4. Там нет конструктора для анонимных внутренних классов. Потому что у него даже нет имени, чтобы построить его.
Статический внутренний класс
Статический может изменить переменные члена, методы, кодовые блоки и другие внутренние классы. Мы называем внутренние классы, модифицированные Static, как статические, но мы предпочитаем называть их вложенными внутренними классами. Самая большая разница между статическими внутренними классами и нестатическими внутренними классами заключается в том, что после завершения компиляции будет скрыта ссылка, и использование будет указывать на его периферию. Но статический внутренний класс не делает, что означает, что статическое создание внутреннего класса не нужно полагаться на периферические классы, и оно не может использовать нестатические переменные-члены и методы любого периферического класса.
открытый класс outterclass {private String Sex; public Static String name = "Chensy"; / ***Статический внутренний класс*/ статический класс innerclass1 {/*Статические члены могут существовать в статическом внутреннем классе*/ public static String _name1 = "chenssy_static"; public void Display () { /** Статический внутренний класс может получить только статические переменные члена и методы периферийного класса* Не может получить доступ к нестатическим переменным членам и методам периферийного класса* / system.out.println («Имя Outclass:» + name); }} / *** Нестатический внутренний класс* / class innerclass2 { /* Статические участники не могут существовать в нестатических внутренних классах* / public String _name2 = "chenssy_inner"; / * Любой член периферийного класса может быть вызван в нестатических внутренних классах, будь то статический или нестатический */ public void display () {System.out.println ("upterclass name:" + name); }} /** * @desc Периферийный метод класса * @author chenssy * @data 2013-10-25 * @return void * /public void display () { / * Периферийный класс доступ к статическому внутреннему классу: внутренний класс. */ System.out.println (innerclass1._name1); /* Статический внутренний класс может быть создан непосредственно, не полагаясь на периферийные классы*/ newnnerclass1 (). Display (); /* Нестатическое внутреннее творение должно полагаться на периферийные классы*/ outterclass.innerclass2 inner2 = new overclass (). New innerclass2 (); /* Члены нестатического внутреннего класса должны использовать экземпляры нестатического внутреннего класса*/ system.out.println (inner2._name2); inner2.display (); } public static void main (string [] args) {overclass over = new overclass (); over.display (); }}Суммировать
Выше приведено краткое изложение трех основных функций Java - инкапсулированных знаний, которые редактор представил вам. Я надеюсь, что это будет полезно для вас. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение, и редактор ответит вам вовремя. Большое спасибо за вашу поддержку сайту wulin.com!