Полиморфизъм в Java: Как да претоварваме или заместваме методи

Полиморфизъм в Java: Как да претоварваме или заместваме методи

Претоварването и заместването на методите са двата начина, по които Java демонстрира полиморфизъм. Полиморфизмът идва от комбинация от две гръцки думи: „поли“ означава много и „морф“ означава форма. Следователно полиморфизмът дава възможност на методите да приемат различни форми.





Следвайте това ръководство, за да научите как да претоварвате или замествате методите в Java.





Какво е претоварване на метода?

„Претоварване на методи“ се отнася до дефиниране на различни методи в клас със същото име. Методите трябва да имат различни подписи. Подпис на метод е комбинацията от име на метод и списък с параметри. Не включва типа на връщане.





Компилаторът знае кой метод да използва, като проверява типа, броя на параметрите и реда, в който са поставени.

Свързани: Проучване на наследството в езика за програмиране на Java



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

Този вид полиморфизъм е известен също като статично или ранно свързване.





Вижте примера за претоварване на метода по -долу:

class Arithmetic{
int cube(int x){
return x*x*x;
}
double cube(double x){
return x*x*x;
}
float cube(float x){
return x*x*x;
}
public static void main(String[] args){
Arithmetic myMultiplication = new Arithmetic();
System.out.println('The cube of 5 is ' + myMultiplication.cube(5));
System.out.println('The cube of 5.0 is ' + myMultiplication.cube(5.0));
System.out.println('The cube of 0.5 is ' + myMultiplication.cube(0.5));
}
}

Изход:





The cube of 5 is 125
The cube of 5.0 is 125.0
The cube of 0.5 is 0.125

Кодът по -горе показва как можете да получите куб от различни типове ( int , двойно , плувам ), използвайки същия метод.

По принцип претоварването на методите се използва за дефиниране на подобни методи с различни типове параметри.

Какво е замяна на метода?

Това се отнася до различна реализация на метод в подклас. Методът трябва да е вече дефиниран в родителския клас.

Заменящият метод (т.е. този в подкласа) трябва да има същия подпис на метод като този в суперкласа. Типът на връщане на метода на замяна може да бъде същият или подтип на този в суперкласа.

Замяната обикновено се използва за включване на специфична реализация на поведението на обекта в подкласа.

class Account{
public void message() {
System.out.println('
Thank you for opening an account with us!');
}
public static void main(String args[]) {
Account myAccount = new Account();
Savings mySavings = new Savings();
FixedDeposit myFixedDepo = new FixedDeposit();
myAccount.message();
mySavings.message();
myFixedDepo.message();
}
}
class Savings extends Account {
public void message() {
System.out.println('
Thank you for opening a Savings account with us!');
}
}
class FixedDeposit extends Account {
public void message() {
System.out.println('
Thank you for opening a Fixed Deposit account with us!');
}
}

Изход:

Thank you for opening an account with us!
Thank you for opening a Savings account with us!
Thank you for opening a Fixed Deposit account with us!

Горният пример показва как методът съобщение () се заменя в подкласовете Спестявания и Фиксиран депозит . Ще се показват различни съобщения за притежателите на банкови сметки със спестовна сметка и тези с сметка с фиксиран депозит.

Свързани: Какво трябва да знаете за използването на низове в Java

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

За да избегнете отмяна на метод, използвайте ключовата дума финал .

final void message (){
System.out.println('
Thank you for opening an account with us!');
}

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

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

Понякога може да се наложи да получите достъп до заменен метод в рамките на метода за замяна. Можете да използвате ключовата дума супер последвано от точков оператор ( . ) и името на метода в такъв случай.

Помислете за суперкласа Животински .

class Animal{
public void move() {
System.out.println('
I can move.');
}
}

По -долу е подклас, наречен Риба , което отменя ход() :

class Fish extends Animal {
public void move() {
System.out.println('
I can swim.');
super.move();
}
public static void main(String args[]){
Fish Tilapia = new Fish();
Tilapia.move();
}
}

Изход:

как да намерите dpi на изображение
I can swim.
I can move.

Когато отменяте метод, трябва също да имате предвид използвания модификатор на достъпа. Модификаторът в подкласа трябва да има същото ниво на видимост или по -високо от това в базовия клас. Например, ако методът в базовия клас е дефиниран като защитени , тогава методът на замяна може да бъде или защитени или обществен .

Прост код с полиморфизъм

Замяната на метода и претоварването са важни за опростяване на кода, а простият код е добра практика.

Защо? Представете си сложна кодова база с повече входове и изходи, отколкото от Grand Central Station. Сега си представете, че опустошителна грешка започва да унищожава упоритата ви работа пред очите ви. Трябва да изолирате източника на инфекцията и трябва да го направите бързо.

Успех, не си опростил кода ... Сега предстои да получиш истински урок по криптография. Използването на ефективни структури от данни и правенето на всичко възможно, за да съкратите кода (като например да имате предвид DRY) е най -добрата ви защита срещу ситуация като тази.

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

Дял Дял Туит електронна поща Как да създавате и извършвате операции с масиви в Java

Изучаване на Java? Позволете на масивите лесно да обработват вашите данни.

Прочетете Напред
Свързани теми
  • Програмиране
  • Java
  • Уроци по кодиране
За автора Джером Дейвидсън(22 статии са публикувани)

Джером е щатен писател в MakeUseOf. Той обхваща статии за програмиране и Linux. Той също е ентусиаст на крипто и винаги следи крипто индустрията.

Още от Джером Дейвидсън

Абонирайте се за нашия бюлетин

Присъединете се към нашия бюлетин за технически съвети, рецензии, безплатни електронни книги и изключителни оферти!

Щракнете тук, за да се абонирате