從向上向下轉型到----抽象類接口(一)

對象的多態性-向上向下轉型
  向上轉型:子類對象變爲父類對象,格式:父類 父類對象 = 子類實例,自動轉換;設計模式

  向下轉型:父類對象變爲子類對象,格式:子類 子類對象 = (子類) 父類實例,強制轉換;this

  注意:對象的多態性和方法複寫是聯繫在一塊兒的spa

  向上轉型:設計

class A{
public void print(){
System.out.println("a")
}
}

class B extends A{
public void print(){
System.out.println("b")
}
}

public class Demo{
public static void main(String args[]){
B b =new B();
b.print();
}
}

 

注意:本程序實例化的是子類對象,而且print()方法又被複寫了,最終調用的必定是被複寫過的方法code

向下轉型對象

public static void main(String args[]){
A a = new B();
B b = (B) a;
b.print();
}

 

注意:必須發生向上轉型以後,才能發生向下轉型,而向下轉型有風險,儘可能少使用.blog

好處:在實際開發中,對象向上轉型的主要意義在於參數的統一,也是最爲主要的用法,而對象的向下轉型指的是調用子類的個性化操做.
舉個例子,假若有多個類繼承自一個類,而且複寫其中的一個方法,那麼咱們能夠:繼承

public class Demo{
public static void main(String args[]){
fun(new B());
fun(new c());
}

public static void fun(A a){ //這裏只用到了A a 一個參數
a.print();
}
}

而向下轉型.若是子類有沒有複寫父類的方法,並且要調用,那麼就要用到了.開發

 

抽象類
抽象類:抽象類就是指在普通方法裏增長了抽象方法,並且抽象方法沒有方法體,用abstract修飾.同時有抽象方法的類,也必需要被abstract修飾
而抽象類與向上向下轉型的關係是,抽象類沒法實例化,要調用,必須使用向上向下轉型.
同時抽象類必須被繼承,並且子類必須重寫父類的全部抽象方法.模板

抽象類的限制
抽象類不能用final修飾

抽象類的應用---模板設計模式
普通方法定義在抽象類時,能夠直接調用類中的方法,可是具體的抽象方法內容就必須由子類提供

abstract class A{
public void fun(){ //普通方法調用子類方法
this.print();
}
public abstract void print(); //抽象方法
}
class X extends A{
public void print(){
System.out.println("重寫父類的抽象方法")
}
}
public class Demo{
public static void main(String args[]){
A a =new X();
a.fun();
}
}

 


理解:若是將父類的方法print比喻爲叫這一行爲的話,子類的重寫則是代表具體是什麼在叫.

相關文章
相關標籤/搜索