一.Android Java基礎(chǔ)_多態(tài)性
向上轉(zhuǎn)換:只能定義被子類覆寫的方法,不能調(diào)用在子類中定義的方法。
class Father {
private int money;
public int getMoney() {return money; }
public void setMoney(int money) {this.money = money; }
public void printInfo() {System.out.println("This is Father");}
}
class Son extends Father{
public void printInfo() {System.out.println("This is son");}
public void playGame() {System.out.println("playGame ...");}
}
class Daughter extends Father{
public void printInfo() {System.out.println("This is daughter");}
}
public class Cnv {
public static void main (String args[]) {
Son son = new Son();
Daughter daughter = new Daughter();
Father f = son; /* */
f.printInfo();
//f.playGame();
f = daughter;
f.printInfo();
}
}
運(yùn)行結(jié)果:
root@ubuntu:/home/topeet/guyilian# javac Cnv.java
root@ubuntu:/home/topeet/guyilian# java Cnv
This is son
This is daughter
JAVA向下轉(zhuǎn)換的例子,在進(jìn)行對(duì)象的向下轉(zhuǎn)換前,必須首先發(fā)生對(duì)象的向上轉(zhuǎn)換.否則會(huì)編譯不過
class Father {
private int money;
public int getMoney() {return money; }
public void setMoney(int money) {this.money = money; }
public void printInfo() {System.out.println("This is Father");}
}
class Son extends Father{
public void printInfo() {System.out.println("This is son");}
public void playGame() {System.out.println("playGame ...");}
}
class Daughter extends Father{
public void printInfo() {System.out.println("This is daughter");}
}
public class Cnv2 {
public static void main (String args[]) {
Father f = new Son();
Son son = (Son)f; /* Son son = new Son(); */
}
}
運(yùn)行結(jié)果:
root@ubuntu:/home/topeet/guyilian# javac Cnv2.java
root@ubuntu:/home/topeet/guyilian# java Cnv2
看一下,下面的例子,假如有一千個(gè)類繼承了father這個(gè)類,如果我們要打印他們的信息,那樣我們豈不是要寫1千個(gè)print函數(shù),下面的第二個(gè)代碼則通過向上轉(zhuǎn)換這個(gè)技巧實(shí)現(xiàn).
class Father {
private int money;
public int getMoney() {return money; }
public void setMoney(int money) {this.money = money; }
public void printInfo() {System.out.println("This is Father");}
}
class Son extends Father{
public void printInfo() {System.out.println("This is son");}
public void playGame() {System.out.println("playGame ...");}
}
class Daughter extends Father{
public void printInfo() {System.out.println("This is daughter");}
}
public class Cnv3 {
public static void main (String args[]) {
Father f = new Father();
Son s = new Son();
Daughter d = new Daughter();
print(f);
print(s);
print(d);
}
public static void print(Father f) {
f.printInfo();
}
public static void print(Son s) {
s.printInfo();
}
public static void print(Daughter d) {
d.printInfo();
}
}
運(yùn)行結(jié)果:
root@ubuntu:/home/topeet/guyilian# javac Cnv3.java
root@ubuntu:/home/topeet/guyilian# java Cnv3
This is Father
This is son
This is daughter
通過向上轉(zhuǎn)換實(shí)現(xiàn):
class Father {
private int money;
public int getMoney() {return money; }
public void setMoney(int money) {this.money = money; }
public void printInfo() {System.out.println("This is Father");}
}
class Son extends Father{
public void printInfo() {System.out.println("This is son");}
public void playGame() {System.out.println("playGame ...");}
}
class Daughter extends Father{
public void printInfo() {System.out.println("This is daughter");}
}
public class Cnv4 {
public static void main (String args[]) {
Father f = new Father();
Son s = new Son();
Daughter d = new Daughter();
print(f);
print(s);
print(d);
}
public static void print(Father f) {
f.printInfo();
}
}
運(yùn)行結(jié)果:
root@ubuntu:/home/topeet/guyilian# javac Cnv4.java
root@ubuntu:/home/topeet/guyilian# java Cnv4
This is Father
This is son
This is daughter
instanceof: 用來判斷一個(gè)對(duì)象是不是某個(gè)類的實(shí)例文章來源:http://www.zghlxwxcb.cn/news/detail-837034.html
class Father {
private int money;
public int getMoney() {return money; }
public void setMoney(int money) {this.money = money; }
public void printInfo() {System.out.println("This is Father");}
public void drink() {System.out.println("drink ...");}
}
class Son extends Father{
public void printInfo() {System.out.println("This is son");}
public void playGame() {System.out.println("playGame ...");}
}
class Daughter extends Father{
public void printInfo() {System.out.println("This is daughter");}
public void dance() {System.out.println("dance ...");}
}
public class Cnv5 {
public static void main (String args[]) {
Father f = new Father();
Son s = new Son();
Daughter d = new Daughter();
printAction(f);
printAction(s);
printAction(d);
}
public static void printAction(Father f) {
if (f instanceof Son) {
Son son = (Son)f;
son.playGame();
}
else if (f instanceof Daughter) {
Daughter d = (Daughter)f;
d.dance();
}
else if (f instanceof Father) {
f.drink();
}
}
}
運(yùn)行結(jié)果:文章來源地址http://www.zghlxwxcb.cn/news/detail-837034.html
root@ubuntu:/home/topeet/guyilian# javac Cnv5.java
root@ubuntu:/home/topeet/guyilian# java Cnv5
drink ...
playGame ...
dance ...
到了這里,關(guān)于Android java基礎(chǔ)_多態(tài)性的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!