1. 程式人生 > >定義抽象類Shape,抽象方法為showArea(),求出面積並顯示,定義矩形類Rectangle,正方形類Square,圓類 Circle,根據各自的屬性,用showArea方法求出各自的面積,在main方法中構造3個對象,調用showArea方法。(體現多態)

定義抽象類Shape,抽象方法為showArea(),求出面積並顯示,定義矩形類Rectangle,正方形類Square,圓類 Circle,根據各自的屬性,用showArea方法求出各自的面積,在main方法中構造3個對象,調用showArea方法。(體現多態)

子類 protected new 都是 package 使用 類指針 3.1 shape

實現多態的三個條件: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方法。(體現多態)