多態:
1、三個條件:繼承,重寫,向上轉型(父類引用指向子類對象);
2、優點:擴展性好,多元化發展;
3、作用:父類裏面的方法被重寫之後,不能在多態裏面調用
先了解下繼承:
1、子類的構造的過程中必須調用其基類的構造方法。
2、子類可以在自己的構造方法中使用super(Argument_list)調用基類的構造方法。
a、使用this(agument list)調用本類另外的構造方法
b、如果用super,必須寫在方法的第一句
3、如果子類的構造方法中沒有顯式地調用基類構造方法,則系統默認調用基類無參數的構造方法。
a、如果子類構造方法中既沒有顯式調用基類構造方法,而基類中又沒有無參的構造方法,則編譯出錯。
Eg:package 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
總結:只要滿足上面三種情況即爲多態。