小白学JAVA,与你们感同身受,JAVA---day5:关于多态的理解和分析。鲁迅的一句话:总之岁月漫长,然而值得等待。
魯迅的一句話:總之歲月漫長(zhǎng),然而值得等待。
至于是不是他說(shuō)的,就看大家的了。
?
/*
多態(tài):事物存在的多種形態(tài)。
多態(tài)的前提:
1.要有繼承關(guān)系。
2.要有方法的重寫。
3.要有父類引用指向子類對(duì)象。
向上轉(zhuǎn)型和向下轉(zhuǎn)型:
1.父類引用指向子類對(duì)象 ? ?向上轉(zhuǎn)型。由小變大
2.向下轉(zhuǎn)型。由大變小,要用到強(qiáng)制類型轉(zhuǎn)換。
3.一定要先有向上轉(zhuǎn)型再有向下轉(zhuǎn)型。
多態(tài)的好處和弊端:
好處:
1.提高了代碼的可維護(hù)性(繼承保證)和擴(kuò)展性(多態(tài)保證)。
弊端:不能使用子類特有的屬性和行為。
作為參數(shù)時(shí),用到instanceof關(guān)鍵字來(lái)判斷前邊的引用是否是后面的數(shù)據(jù)類型。?? ? ?
抽象類:abstract關(guān)鍵字
abstract class{}
public abstract void eat();
抽象類中不一定有抽象方法,有抽象方法的類一定是抽象類或接口。
抽象類是不能實(shí)例化的,要有具體的子類實(shí)例化按照多態(tài)的方式。
抽象類:
1.成員變量:既可以是變量,也可以是常量。abstract不能修飾成員變量。
2.成員方法:可以是抽象,也可以是非抽象。
3.構(gòu)造方法:有。
成員方法的特點(diǎn):
抽象方法是強(qiáng)制子類要做的方法。
非抽象方法是子類繼承的,提高了代碼的復(fù)用性。?? ?
?*/
abstract class Animal{
?? ?public abstract void eat();
}
class Cat extends Animal{
?? ?
?? ?public void eat(){
?? ??? ?System.out.println("吃飯");
?? ?}
}
class day5{
?? ?public static void main(String[] args) {
?? ??? ?/*
?? ??? ?Father f=new Son(); ? ? ? ? ? ? ?//父類引用指向子類對(duì)象 ? ?向上轉(zhuǎn)型。由小變大
?? ??? ?
?? ??? ?System.out.println(f.num); ? ? ? //對(duì)于成員變量,編譯看左邊(父類),運(yùn)行看左邊(父類)。
?? ??? ?f.print();?? ??? ??? ??? ? ? ? ? ? //對(duì)于成員方法,編譯看左邊(父類),運(yùn)行看右邊(子類)。 ? 動(dòng)態(tài)綁定。 ?
?? ??? ?f.aim(); ? ? ? ? ? ? ? ? ? ? ? ? //對(duì)于靜態(tài)方法,編譯看左邊(父類),運(yùn)行看左邊(父類)。?? ??? ?
?? ??? ?System.out.println(new Son().num);*/
?? ??? ?/*
?? ??? ?Son s=(Son)f; ??? ??? ? ? ? ? ? ? ?//向下轉(zhuǎn)型。由大變小,要用到強(qiáng)制類型轉(zhuǎn)換。
?? ??? ?s.print(); ? ? ? ? ? ? ? ? ? ? ?
?? ??? ?Animal a=new Cat();
?? ??? ?a.eat();
? ? ? ?
?? ??? ?if(a instanceof Cat){
?? ??? ??? ?Dog c=(Dog)a;?? ??? ??? ??? ??? ?//ClassCastException: Cat cannot be cast to Dog ?
?? ??? ??? ?c.eat();
?? ??? ?} ? ? ? ? ??
?? ??? ?else a.eat(); ?*/
?? ??? ?Cat c=new Cat();
?? ??? ?c.eat();
?? ?}
}
/*
class Animal{
?? ?public void eat(){
?? ??? ?System.out.println("動(dòng)物吃飯");
?? ?}
}
class Cat extends Animal{
?? ?public void eat(){
?? ??? ?System.out.println("貓吃魚");
?? ?}
}
class Dog extends Animal{
?? ?public void eat(){
?? ??? ?System.out.println("狗吃水");
?? ?}
}
class Father{
?? ?int num =10;
?? ?public void print(){
?? ??? ?System.out.println("父類");
?? ?}
?? ??? ?static void aim(){
?? ??? ?System.out.println("父類靜態(tài)運(yùn)行");
?? ?}
}
class Son extends Father{
?? ?int num=20;
?? ?public void print(){
?? ??? ?System.out.println("子類");
?? ?}
?? ??? ?static void aim(){
?? ??? ?System.out.println("子類靜態(tài)運(yùn)行");
?? ?}
}*/
總結(jié)
以上是生活随笔為你收集整理的小白学JAVA,与你们感同身受,JAVA---day5:关于多态的理解和分析。鲁迅的一句话:总之岁月漫长,然而值得等待。的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 连接MySql出现异常解决:java.s
- 下一篇: Django - 模板相关