- Эта серия будет сборником моих заметок, пока я читаю Объектно-ориентированное программирование и второе издание Java . Это дорогая книга, но это интернет, поэтому я уверен, что вы можете найти где-нибудь более дешевую версию книги. Я также сделал YouTube версию этого поста, поэтому, пожалуйста, проверьте и это. Также здесь есть ссылка на GitHub с кодом
Наследование
- В объектно-ориентированном программировании (ООП) наследование очень важно для повторного использования кода. Наследование позволяет суперклассам распространять свои свойства вниз на подклассы. Теперь, когда мы немного поговорили о наследовании, я опубликую весь код, а затем мы оба пройдемся по нему строка за строкой. Наш код будет состоять из класса Сотрудников, класса Сотрудников, класса менеджеров и класса секретарей.
public class Person { private String name; Person(String name){ this.name = name; } public String getName() { return this.name; } }
Класс лиц
- Этот класс Person будет нашим основным суперклассом, он находится на вершине нашей иерархии классов, и все остальные классы унаследуют его. Мы видим, что это очень простой класс, у него есть переменная экземпляра типа String с именем name и метод получения getName(). Наконец, мы видим метод, который имеет то же имя, что и класс, это конструктор. Но что такое конструктор на самом деле?
Что такое конструктор?
Конструкторы колодцев – это методы, которые имеют то же имя, что и их содержащий класс. У нас даже может быть несколько конструкторов, если их сигнатуры методов различны. Сигнатура метода, представляющая собой комбинацию имени метода, его типа параметра и количества параметров. Если мы определим два идентичных конструктора, то получим ошибку времени компиляции.
Не всем классам нужен конструктор, если мы не определим конструктор, компилятор Java определит его для нас. Этот конструктор будет конструктором по умолчанию без параметров. При работе с наследованием следует с осторожностью использовать конструктор по умолчанию, поскольку он вызовет метод конструктора суперклассов по умолчанию. Если в суперклассе не существует конструктора, то будет создана ошибка компиляции.(подробнее об этом позже в этом посте). Теперь давайте перейдем к классу Сотрудников.
public class Employee extends Person{ private float basicSalary; private String employeeNumber; Employee(String name,String employeeNumber,float basicSalary){ super(name); this.employeeNumber = employeeNumber; this.basicSalary = basicSalary; } public String getEmployeeNumber() {return employeeNumber;} public float getBasicSalary() {return basicSalary;} //WE ARE RUNNING STUFF FROM HERE public static void main(String[] args) { Manager m = new Manager("Bob1","01234M",9000.0f,2000.0f); Secretery s = new Secretery("Bob2","98765s",2500.0f); System.out.print("The Manager" + m.getName() + "Employee number ->" + m.getEmployeeNumber()); System.out.println("has a salary of" + m.getBasicSalary()); System.out.println("Secretery has a salary of" + s.getBasicSalary()+ "Employee number ->" + s.getEmployeeNumber()); System.out.print("The Manager " + m.getName()); System.out.println("has a allowance of" + m.getAllowance()); } }
Класс сотрудников
- Сначала обратите внимание на основной метод, указывающий, что это будет отправной точкой нашего приложения. Следующее, что вы должны заметить, это
расширяется
ключевое слово, давайте поговорим об этом.
Расширяться
- Это ключевое слово говорит нам, что класс Employee является
подклассом
класса Person, но что такое подкласс? Хороший вопрос!
Что такое подкласс?
- Согласно документации, “подкласс наследует все общедоступные и защищенные элементы своего родителя, независимо от пакета. Если подкласс находится в том же пакете, что и родительский, он также наследует закрытый элемент пакета родительского класса.”. В типичном стиле документации это вызывает больше вопросов, чем ответов. Что такое пакет?, что такое частный, защищенный и пакет-частный? Итак, давайте ответим на эти вопросы, и тогда мы сможем понять, что такое подкласс.
Что такое посылка?
- Пакет – это способ организации связанных классов, в этом отношении пакеты похожи на файлы. Если пакеты похожи на файлы, то зачем иметь и то, и другое? Ну, пакеты на самом деле отличаются от файлов 3 основными способами.
1) Разрешение конфликтов имен : пакеты позволяют нам делать такие вещи, как этот com.zzz. Круг и ком.гггг. Круг, который, хотя и носит одно и то же название Круг
на самом деле это два разных класса, и к ним можно относиться так. Этот тип гибкости называется Управление пространством имен .
2) Распространение : пакеты позволяют распространять коллекцию повторно используемых классов, обычно в формате, известном как архив Java (JAR) файл.
3) Контроль доступа : существуют модификаторы контроля доступа, защищенные и защищенные пакеты (подробнее об этом позже), которые специфичны для пакетов. Они определяют, что доступно из одного пакета в другой.
Что такое модификатор контроля доступа?
- Эти модификаторы определяют, какие классы и методы могут использовать измененные классы, методы и переменные. Существует 4 модификатора управления, но когда ничего не определено, модификатор доступа по умолчанию устанавливается в
package private
.
1) общедоступный : это позволяет любому классу или методу получить доступ к тому, что было изменено ключевым словом public
.
2) частный : ограничивает доступ только к классу.
3) частный пакет (по умолчанию) : это значение по умолчанию, если модификаторы не указаны. Все классы в одном пакете имеют доступ к тому, что было изменено. Однако подклассы из другого пакета не имеют доступа к частным методам и переменным пакета суперкласса.
4) защищенный : имеет те же ограничения, что и закрытый пакет
но это позволяет доступ к подклассам.
Переменные экземпляра
- Переменные экземпляра – это просто переменные, которые получают новые значения при каждом новом создании объекта. В классе Employee переменными экземпляра являются
частная плавающая базовая зарплата
ичастная строка employeeNumber
. частная строка должна быть нам знакома. Все это говорит о том, что существует переменная типа string, доступная только для методов внутри этого класса. Но что такое типfloat
? Проще говоря, float – это примитивный тип данных, который можно использовать для хранения чисел с десятичными знаками, но он не так точен, как тип double. Вы также заметите число, подобное этому2000.0f
f должен сообщить компилятору, что это тип float. Если f отсутствует, то компилятор будет считать, что тип является двойным. Если вы хотите по-настоящему разобраться в технических тонкостях того, что такоеfloat
, то я бы посоветовал вам погуглить32-разрядный IEEE 754 с плавающей запятой с одинарной точностью
. Это приведет вас к арифметической кроличьей норе с плавающей запятой.
Конструктор
Теперь давайте перейдем к конструктору класса Employee. Вы заметите метод
супер (имя)
. В данном случае мы используем метод super для вызова конструктора суперкласса и присвоения ему параметра name.Когда у нас есть конструктор, который является подклассом, и мы не определяем метод super(…args), компилятор Java создаст свой собственный метод super() в конструкторе. Если у суперкласса нет конструктора без аргументов, то мы получим ошибку времени компиляции. Вы можете сами заметить эту ошибку, если удалите
супер(имя)
из конструктора сотрудников.
Класс секретарши
public class Secretery extends Employee{ Secretery(String name, String employeeNumber, float basicSalary){ super(name,employeeNumber,basicSalary); } }
- Это очень простой класс, который расширяет класс
Employee
, все, что мы видели раньше. Однако, когда происходит вызов конструктора, мы вызываем супер-метод, который вызывает конструкторEmployee
, который затем вызывает конструкторPerson
. Цепочка запускаемых конструкторов называетсяцепочкой конструкторов
.
Класс менеджера
public class Manager extends Employee{ private float allowance; Manager(String name, String employeeNumber, float basicSalary, float allowanceAmt){ super(name,employeeNumber,basicSalary); this.allowance = allowanceAmt; } public float getAllowance() { return allowance; } }
- Мне очень мало что можно сказать об этом классе, потому что он делает все, о чем мы уже говорили. Это базовый класс Java.
Основной метод сотрудника
Основной метод действует как точка входа для нашего приложения, когда мы запустим это приложение, оно начнется с основного метода. Следует также отметить, что вы никогда не должны менять название основного метода. Если вы измените имя основного метода, он перестанет быть основным методом.
Наконец, все, что нам нужно сделать, это запустить приложение, и мы должны увидеть все распечатанное на консоли.
System.out.печать()
- Именно так мы получаем информацию из приложения на консоль. Класс
System
предоставляет нам доступ к входным и выходным потокам, которые позволяют нам получать данные в наше приложение и из него.выход
является выходным потоком, которыйСистема
предоставляет нам, и ее назначение вывода предопределено средой. Если вы запустите этот код в eclipse, то предопределенным местом назначения будет консоль eclipse.печать()
– это то, что позволяет нам печатать на консоли. Если вы хотите узнать больше о потоках Java, вот Ссылка .
- Спасибо, что нашли время в свой день, чтобы прочитать этот мой пост в блоге. Если у вас есть какие-либо вопросы или проблемы, пожалуйста, прокомментируйте ниже или свяжитесь со мной по Твиттер .
- Также не забудьте проверить мой канал YouTube для получения дополнительных учебных пособий по программированию.
Оригинал: “https://dev.to/theplebdev/object-oriented-programming-and-java-3ii1”