定義抽象類Shape,抽象方法為showArea(),求出面積並顯示,定義矩形類Rectangle,正方形類Square,圓類 Circle,根據各自的屬性,用showArea方法求出各自的面積,在main方法中構造3個對象,調用showArea方法。(體現多態)
實現多態的三個條件:1.要有繼承2.要有抽象方法重寫3.用父類指針(引用)指向子類對象
重載重寫重定義的區別:
1.重載:在同一個類中進行; 編譯時根據參數類型和個數決定方法調用; 子類無法重載父類;
父類同名方法被子類該方法覆蓋.
2.重寫:在父類和子類之間進行; 父類與子類方法有完全相同類型;
在運行時根據具體對象類型決定方法調用;
3.在重寫中有抽象方法的會產生多態;沒有使用抽象方法叫重定義
以下具體代碼具體分析:
package test3;
abstract class Shape{ //抽象類(一定有抽象方法,但不一定都是抽象方法)
protected double area;
abstract void showArea(); //抽象方法
}
class Rectangle extends Shape{ //類的繼承
private double x,y;
Rectangle(){}
Rectangle(double x,double y){ //有參構造方法初始化
this.x=x;
this.y=y;
}
public double getX(){
return x;
}
public double getY(){
return y;
}
public void showArea(){ //計算面積並顯示.showArea方法的重寫
area=getX()*getY();
System.out.println(area);
}
}
class Square extends Shape{ //同上
private double x;
Square(){}
Square(double x){
this.x=x;
}
public double getX(){
return x;
}
public void showArea(){
area=getX()*getX();
System.out.println(area);
}
}
class Circle extends Shape{ //同上
private double r;
Circle(){}
Circle(double r){
this.r=r;
}
public double getR(){
return r;
}
public void showArea(){
area=3.14*getR()*getR();
System.out.println(area);
}
}
public class Test3_2 {
public static void main(String args[]){
Shape re=new Rectangle(2,3); //多態產生的第3個條件.父類的引用指向子類的對象
fun(re); //抽象方法重寫產生多態,運行時根據具體對象類型決定方法調用
Shape sq=new Square(2);
fun(sq);
Shape ci=new Circle(2);
fun(ci);
}
public static void fun(Shape p){
p.showArea();
}
}
定義抽象類Shape,抽象方法為showArea(),求出面積並顯示,定義矩形類Rectangle,正方形類Square,圓類 Circle,根據各自的屬性,用showArea方法求出各自的面積,在main方法中構造3個對象,調用showArea方法。(體現多態)