更新時(shí)間:2022-06-23 11:17:00 來源:動(dòng)力節(jié)點(diǎn) 瀏覽1788次
在本教程中,動(dòng)力節(jié)點(diǎn)小編將借助示例了解 Java 多態(tài)及其實(shí)現(xiàn)。
多態(tài)是面向?qū)ο缶幊痰囊粋€(gè)重要概念。它只是意味著不止一種形式。
即同一個(gè)實(shí)體(方法或算子或?qū)ο?在不同的場(chǎng)景下可以執(zhí)行不同的操作。
class Polygon {
// method to render a shape
public void render() {
System.out.println("Rendering Polygon...");
}
}
class Square extends Polygon {
// renders Square
public void render() {
System.out.println("Rendering Square...");
}
}
class Circle extends Polygon {
// renders circle
public void render() {
System.out.println("Rendering Circle...");
}
}
class Main {
public static void main(String[] args) {
// create an object of Square
Square s1 = new Square();
s1.render();
// create an object of Circle
Circle c1 = new Circle();
c1.render();
}
}
輸出
Rendering Square...
Rendering Circle...
在上面的例子中,我們創(chuàng)建了一個(gè)超類:多邊形和兩個(gè)子類:正方形和圓圈. 注意render()方法的使用。
該render()方法的主要目的是渲染形狀。但是,繪制正方形的過程與繪制圓形的過程不同。
因此,該render()方法在不同的類中表現(xiàn)不同。或者,我們可以說render()是多態(tài)的。
為什么是多態(tài)性?
多態(tài)性允許我們創(chuàng)建一致的代碼。在前面的例子中,我們還可以創(chuàng)建不同的方法:renderSquare()和renderCircle()來渲染正方形和圓圈, 分別。
這將完美地工作。但是,對(duì)于每種形狀,我們都需要?jiǎng)?chuàng)建不同的方法。它會(huì)使我們的代碼不一致。
為了解決這個(gè)問題,Java 中的多態(tài)性允許我們創(chuàng)建一個(gè)方法render(),該方法將針對(duì)不同的形狀表現(xiàn)不同。
注意:該print()方法也是多態(tài)性的一個(gè)例子。它用于打印不同類型的值,如char, int,string等。
方法覆蓋
方法重載
運(yùn)算符重載
在Java 中的繼承期間,如果相同的方法同時(shí)存在于超類和子類中。然后,子類中的方法會(huì)覆蓋超類中的相同方法。這稱為方法覆蓋。
在這種情況下,同一個(gè)方法將在超類中執(zhí)行一項(xiàng)操作,在子類中執(zhí)行另一項(xiàng)操作。例如,
示例 1:使用方法覆蓋的多態(tài)性
class Language {
public void displayInfo() {
System.out.println("Common English Language");
}
}
class Java extends Language {
@Override
public void displayInfo() {
System.out.println("Java Programming Language");
}
}
class Main {
public static void main(String[] args) {
// create an object of Java class
Java j1 = new Java();
j1.displayInfo();
// create an object of Language class
Language l1 = new Language();
l1.displayInfo();
}
}
輸出:
Java Programming Language
Common English Language
在上面的例子中,我們創(chuàng)建了一個(gè)名為語和一個(gè)名為的子類爪哇. 在這里,該方法displayInfo()同時(shí)存在于語和爪哇.
用途displayInfo()是打印信息。但是,它正在打印不同的信息語和爪哇.
根據(jù)調(diào)用該方法的對(duì)象,打印相應(yīng)的信息。
在 Java 類中,如果參數(shù)不同,我們可以創(chuàng)建具有相同名稱的方法。例如,
void func() { ... }
void func(int a) { ... }
float func(double a) { ... }
float func(int a, float b) { ... }
這在 Java 中稱為方法重載。在這里,相同的方法會(huì)根據(jù)參數(shù)執(zhí)行不同的操作。
示例:使用方法重載的多態(tài)性
class Pattern {
// method without parameter
public void display() {
for (int i = 0; i < 10; i++) {
System.out.print("*");
}
}
// method with single parameter
public void display(char symbol) {
for (int i = 0; i < 10; i++) {
System.out.print(symbol);
}
}
}
class Main {
public static void main(String[] args) {
Pattern d1 = new Pattern();
// call method without any argument
d1.display();
System.out.println("\n");
// call method with a single argument
d1.display('#');
}
}
輸出:
**********
##########
在上面的例子中,我們創(chuàng)建了一個(gè)名為圖案. 該類包含一個(gè)名為display()重載的方法。
// method with no arguments
display() {...}
// method with a single char type argument
display(char symbol) {...}
這里的主要功能display()是打印圖案。但是,根據(jù)傳遞的參數(shù),該方法正在執(zhí)行不同的操作:
*如果沒有傳遞參數(shù),則打印 的模式或
char如果傳遞了單個(gè)類型參數(shù),則打印參數(shù)的模式。
注意:調(diào)用的方法由編譯器決定。因此,它也被稱為編譯時(shí)多態(tài)性。
Java 中的一些運(yùn)算符對(duì)不同的操作數(shù)表現(xiàn)不同。例如,
+運(yùn)算符被重載以執(zhí)行數(shù)字加法以及字符串連接,并且
像&,|和之類的運(yùn)算符!被重載用于邏輯和按位運(yùn)算。
讓我們看看如何使用運(yùn)算符重載來實(shí)現(xiàn)多態(tài)性。
+運(yùn)算符用于添加兩個(gè)實(shí)體。但是,在 Java 中,+運(yùn)算符執(zhí)行兩個(gè)操作。
1.+與數(shù)字(整數(shù)和浮點(diǎn)數(shù))一起使用時(shí),執(zhí)行數(shù)學(xué)加法。例如,
int a = 5;
int b = 6;
// + with numbers
int sum = a + b; // Output = 11
2. 當(dāng)我們使用+帶字符串的運(yùn)算符時(shí),它會(huì)進(jìn)行字符串連接(連接兩個(gè)字符串)。例如,
String first = "Java ";
String second = "Programming";
// + with strings
name = first + second; // Output = Java Programming
在這里,我們可以看到+運(yùn)算符在 Java 中被重載以執(zhí)行兩個(gè)操作:加法和連接。
如果一個(gè)變量在不同的條件下引用不同的值,則稱為多態(tài)。
對(duì)象變量(實(shí)例變量)表示Java中多態(tài)變量的行為。這是因?yàn)橐粋€(gè)類的對(duì)象變量既可以引用它的類的對(duì)象,也可以引用它的子類的對(duì)象。
示例:多態(tài)變量
class ProgrammingLanguage {
public void display() {
System.out.println("I am Programming Language.");
}
}
class Java extends ProgrammingLanguage {
@Override
public void display() {
System.out.println("I am Object-Oriented Programming Language.");
}
}
class Main {
public static void main(String[] args) {
// declare an object variable
ProgrammingLanguage pl;
// create object of ProgrammingLanguage
pl = new ProgrammingLanguage();
pl.display();
// create object of Java class
pl = new Java();
pl.display();
}
}
輸出:
I am Programming Language.
I am Object-Oriented Programming Language.
在上面的例子中,我們創(chuàng)建了一個(gè)對(duì)象變量請(qǐng)的編程語言班級(jí)。這里,請(qǐng)是一個(gè)多態(tài)變量。這是因?yàn)椋诼暶髦衟l = new ProgrammingLanguage(),并且,在聲明中pl = new Java()。
以上就是關(guān)于“Java的多態(tài)性的示例”介紹,大家如果對(duì)此比較感興趣,想了解更多相關(guān)知識(shí),可以關(guān)注一下動(dòng)力節(jié)點(diǎn)的Java視頻教程,里面的課程內(nèi)容細(xì)致全面,通俗易懂,很適合沒有基礎(chǔ)的小白學(xué)習(xí),希望對(duì)大家能夠有所幫助哦。
相關(guān)閱讀
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743