Скриване на променливи и методи в Java

1. Въведение

В този урок ще научим за скриването на променливи и методи в езика Java .

Първо, ще разберем концепцията и целта на всеки от тези сценарии. След това ще се потопим в случаите на употреба и ще разгледаме различни примери.

2. Променливо скриване

Скриването на променлива се случва, когато декларираме свойство в локален обхват, който има същото име като това, което вече имаме във външния обхват.

Преди да преминем към примерите, нека обобщим накратко възможните обхвати на променливите в Java. Можем да ги определим със следните категории:

  • локални променливи - декларирани в парче код, като методи, конструктори, във всеки блок код с фигурни скоби
  • променливи на екземпляра - дефинирани вътре в клас и принадлежат към екземпляра на обекта
  • клас или статични променливи - се декларират в класа с ключовата дума static . Те имат обхват на ниво клас.

Сега, нека опишем скриването с примери за всяка отделна категория променливи.

2.1. Силата на местното

Нека да разгледаме класа HideVariable :

public class HideVariable { private String message = "this is instance variable"; HideVariable() { String message = "constructor local variable"; System.out.println(message); } public void printLocalVariable() { String message = "method local variable"; System.out.println(message); } public void printInstanceVariable() { String message = "method local variable"; System.out.println(this.message); } }

Тук имаме променливата на съобщението, декларирана на 4 различни места. Локалните променливи, декларирани вътре в конструктора, и двата метода засенчват променливата на екземпляра.

Нека тестваме инициализацията на обект и извикване на методите:

HideVariable variable = new HideVariable(); variable.printLocalVariable(); variable.printInstanceVariable();

Резултатът от горния код е:

constructor local variable method local variable this is instance variable

Тук първите 2 повиквания извличат локалните променливи.

За достъп до променливата на екземпляра от локалния обхват можем да използваме тази ключова дума, както е показана в метода printInstanceVariable () .

2.2. Скриване и йерархията

По същия начин, когато и детето, и родителските класове имат променлива с едно и също име, променливата на детето скрива тази от родителя.

Да предположим, че имаме родителския клас:

public class ParentVariable { String instanceVariable = "parent variable"; public void printInstanceVariable() { System.out.println(instanceVariable); } }

След това дефинираме детски клас:

public class ChildVariable extends ParentVariable { String instanceVariable = "child variable"; public void printInstanceVariable() { System.out.println(instanceVariable); } }

За да го тестваме, нека инициализираме два екземпляра. Един с родителски клас и друг с детето, след което извикайте методите printInstanceVariable () за всеки от тях:

ParentVariable parentVariable = new ParentVariable(); ParentVariable childVariable = new ChildVariable(); parentVariable.printInstanceVariable(); childVariable.printInstanceVariable();

Резултатът показва скриването на свойството:

parent variable child variable

В повечето случаи трябва да избягваме да създаваме променливи със същото име както в родителски, така и в детски класове . Вместо това трябва да използваме подходящ модификатор на достъп като private и да предоставим методи за получаване / настройка за тази цел.

3. Скриване на метод

Скриването на метод може да се случи във всяка структура на йерархия в java. Когато детски клас дефинира статичен метод със същия подпис като статичен метод в родителския клас, тогава методът на детето скрива този в родителския клас. За да научите повече за статичната ключова дума, това писане е добро начало.

Същото поведение, включващо методите на екземпляра, се нарича замяна на метода. За да научите повече за метода за отмяна на плащане, нашето ръководство тук.

Сега, нека да разгледаме този практически пример:

public class BaseMethodClass { public static void printMessage() { System.out.println("base static method"); } }

BaseMethodClass има един статичен метод printMessage () .

След това нека създадем детски клас със същия подпис като в основния клас:

public class ChildMethodClass extends BaseMethodClass { public static void printMessage() { System.out.println("child static method"); } }

Ето как работи:

ChildMethodClass.printMessage();

Изходът след извикване на метода printMessage () :

child static method

В ChildMethodClass.printMessage () крие метода в BaseMethodClass .

3.1. Скриване на метод срещу заместване

Скриването не работи като заместване, защото статичните методи не са полиморфни. Заменянето се извършва само с методите на екземпляра. Той поддържа късно свързване, така че кой метод ще бъде извикан, се определя по време на изпълнение.

От друга страна, скриването на метод работи със статични. Следователно се определя по време на компилиране .

4. Заключение

В тази статия разгледахме концепцията за скриване на метод и променлива в Java . Показахме различни сценарии на скриване и проследяване на променливи. Важният акцент в статията е също сравняването на метода, който заменя и скрива.

Както обикновено, пълният код е достъпен в GitHub.