Java面向對象多態注意點(隨記)

  多態:

1、三個條件:繼承,重寫,向上轉型(父類引用指向子類對象);

2、優點:擴展性好,多元化發展;

3、作用:父類裏面的方法被重寫之後,不能在多態裏面調用

先了解下繼承:

1、子類的構造的過程中必須調用其基類的構造方法。

2、子類可以在自己的構造方法中使用superArgument_list)調用基類的構造方法。

   a、使用this(agument list)調用本類另外的構造方法

   b、如果用super,必須寫在方法的第一句

3、如果子類的構造方法中沒有顯式地調用基類構造方法,則系統默認調用基類無參數的構造方法。

   a、如果子類構造方法中既沒有顯式調用基類構造方法,而基類中又沒有無參的構造方法,則編譯出錯。

Egpackage xzp;

publicclass A {

protectedvoid print(String s){

System.out.println(s);

    }

    A(){

print("A()");

    }

publicvoid f(){

print("A:f()");

    }

staticclass B extends A{

 B(){

 print("B()");

}

publicvoid f(){

 print("B:f()");

   }

publicstaticvoid main(String[] args) {

B b=new B();

b.f();

}

}

}

結果:A()

B()

B:f()

再瞭解方法的重寫(OverRide)

A、在子類中可以根據需要對從基類中繼承來的方法進行重寫。

B、重寫方法必須和被重寫方法具體有相同的方法名稱參數列表和返回類型。

C、重寫方法不能使用必被重寫方法更嚴格的訪問權限。

舉例:

package xzp;

publicclass FatherClass {

publicintvalue;

publicvoid f(){

value=100;

System.out.println("FatherClass.value="+value);

}

}

class ChildClass extends FatherClass{

publicintvalue;

publicvoid f(){

value=200;

   System.out.println("ChildClass.value="+value);

   System.out.println(value);

   System.out.println(super.value);

   }

publicstaticvoid main(String[] args) {

ChildClass c=new ChildClass();

c.f();

}

}

運行結果:ChildClass.value=200

200

0

代碼修改爲:

package xzp;

publicclass FatherClass {

publicintvalue;

publicvoid f(){

value=100;

System.out.println("FatherClass.value="+value);

}

}

class ChildClass extends FatherClass{

publicintvalue;

publicvoid f(){

super.f();

value=200;

   System.out.println("ChildClass.value="+value);

   System.out.println(value);

   System.out.println(super.value);

   }

publicstaticvoid main(String[] args) {

ChildClass c=new ChildClass();

c.f();

}

}

 運行結果:

FatherClass.value=100

ChildClass.value=200

200

100

最後瞭解下向上轉型:父類的引用指向子類的對象;

舉例子(1)沒有向上轉型的時候代碼:

package xzp;

publicclass B {

publicvoid fun(){

}

}

class C extends B{

publicvoid fun(int a,int b){

     int sum;

     sum=a+b;

System.out.println(sum);

}

publicstaticvoid main(String[] args) {

C c=new C();

c.fun(1,2);

}

}

結果:3

2)向上轉型的時候代碼:

package xzp;

publicclass B {

publicvoid fun(){

System.out.println(1);

}

}

class C extends B{

publicvoid fun(int a,int b){

int sum;

sum=a+b;

System.out.println(sum);

}

publicstaticvoid main(String[] args) {

B c=new C();

c.fun();

}

}

運行結果爲:1

總結:只要滿足上面三種情況即爲多態。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章