Java是面向對象編程語言,支持繼承、封裝、重寫和多態等特性。其中,重寫和多態是Java最重要也是最常見的兩個特性之一。
重寫(Override)
重寫即是子類對父類繼承而來的方法進行重新定義,使其方法體內容發生改變,但是方法名、返回值和參數列表都不能改變。重寫提供了一種方式,使得子類可以覆蓋父類的同名方法,以實現不同的方法功能。例如:
class Animal{ public void sound(){ System.out.println("動物發出叫聲"); } } class Cat extends Animal{ public void sound(){ System.out.println("喵喵喵"); } } class Dog extends Animal{ public void sound(){ System.out.println("汪汪汪"); } }
以上代碼定義了動物類Animal,以及它的兩個子類Cat和Dog。Cat和Dog都重寫了sound()方法,根據不同的動物類型發出不同的叫聲。當創建Cat或Dog的實例并調用sound()方法時,輸出結果也不同:
Animal cat = new Cat(); Animal dog = new Dog(); cat.sound(); // 輸出 "喵喵喵" dog.sound(); // 輸出 "汪汪汪"
多態(Polymorphism)
在Java中,多態包括靜態多態和動態多態兩種形式。靜態多態是指在編譯時就確定方法的調用,由編譯器決定使用哪個方法;動態多態是指在運行時根據對象的實際類型進行方法調用,由虛擬機決定使用哪個方法。
動態多態基于重寫進行實現,提供了一種同一個方法可以有多個不同的實現方式的方式。即,同一個方法在不同的對象上具有不同的行為。例如:
class Shape{ public void print(){ System.out.println("這是一個形狀"); } } class Rectangle extends Shape{ public void print(){ System.out.println("這是一個矩形"); } } class Circle extends Shape{ public void print(){ System.out.println("這是一個圓形"); } }
以上代碼定義了Shape、Rectangle和Circle三個類,其中Rectangle和Circle都是Shape的子類,它們都重寫了Shape中的print()方法。當創建一個Shape類型的數組并分別存儲Rectangle和Circle對象時,便可以實現多態的效果:
Shape[] shapes = new Shape[2]; shapes[0] = new Rectangle(); shapes[1] = new Circle(); for(Shape shape : shapes){ shape.print(); }
輸出結果為:
這是一個矩形 這是一個圓形
由于調用的是Shape類中的print()方法,但是實際上調用的卻是Rectangle和Circle類中的重寫版本,根據不同的實際類型輸出不同的信息,就實現了動態多態的效果。
上一篇ajax中getpost
下一篇java正則數字和字母