關于子類中方法重寫的問題
如果父類中的抽象方法是無參的,那么子類中重寫的方法是不是必須也是無參的?
比如要算矩形的周長需要兩個參數l和h,面積需要兩個參數l和h,而圓形周長和面積只需要一個參數r。
這個時候需要怎么定義抽象方法?是不是需要再定義兩次抽象方法為兩個參數的和一個參數的,并且重寫的方法中參數還必須和抽象方法中一樣?
這是抽象父類Shape:
public?abstract?class?Shape?{
public?abstract?void?getGirth(int?a,int?b);
public?abstract?void?getArea(int?a,int?b);
public?abstract?void?getGirth(int?a);
public?abstract?void?getArea(int?a);
}這是子類Rectangle:
public?class?Rectangle?extends?Shape?{
@Override
public?void?getGirth(int?a,int?b)?{
//?TODO?Auto-generated?method?stub
System.out.println("矩形的面積為:"+(2*a+2*b));
}
@Override
public?void?getArea(int?a,int?b)?{
//?TODO?Auto-generated?method?stub
System.out.println("矩形的面積為:"+a*b);
}
@Override
public?void?getGirth(int?a)?{
//?TODO?Auto-generated?method?stub
}
@Override
public?void?getArea(int?a)?{
//?TODO?Auto-generated?method?stub
}這是子類Circle:
public?class?Circle?extends?Shape?{
@Override
public?void?getGirth(int?a)?{
//?TODO?Auto-generated?method?stub
System.out.println("圓形的周長為:"+(2*3.14*a));
}
@Override
public?void?getArea(int?a)?{
//?TODO?Auto-generated?method?stub
System.out.println("圓形的面積為:"+3.14*a*a);
}
@Override
public?void?getGirth(int?a,?int?b)?{
//?TODO?Auto-generated?method?stub
}
@Override
public?void?getArea(int?a,?int?b)?{
//?TODO?Auto-generated?method?stub
}測試類Test:
public?class?Test?{
public?static?void?main(String[]?args)?{
//?TODO?Auto-generated?method?stub
Shape?a?=?new?Rectangle();
Shape?b?=?new?Circle();
a.getGirth(3,?4);
a.getArea(3,?4);
b.getGirth(3);
b.getArea(3);
}運行結果:
矩形的面積為:14 矩形的面積為:12 圓形的周長為:18.84 圓形的面積為:28.259999999999998
想問下有沒有更簡便點的辦法?
2015-02-12
首先重寫子類的方法必須和被繼承的父類的方法相同 //父類 public?class?Shape?{ public?void?getArea(){ System.out.println("圖形的面積"); } public?void?getGirth(){ System.out.println("圖形的周長"); } } //圓形子類 public?class?Circle?extends?Shape?{ int?r=3; public?void?getArea(){ double?area=3.14*r*r; System.out.println("圓形的面積"+area); } public?void?getGirth(){ double?girth=2*3.14*r; System.out.println("圓形的周長"+girth); } } //方形子類 public?class?Rectangle?extends?Shape?{ int?a=2; int?b=4; public?void?getArea(){ double?area=a*b; System.out.println("方形的面積"+area); } public?void?getGirth(){ double?girth=2*(a+b); System.out.println("圓形的周長"+girth); } } //測試類 public?class?Initial?{ public?static?void?main(String[]?args)?{ //?TODO?Auto-generated?method?stub Circle?circle=?new?Circle(); circle.getArea(); circle.getGirth(); Rectangle?rectangle=?new?Rectangle(); rectangle.getArea(); rectangle.getGirth(); } }這是我寫的。。。。
2015-07-24
//父類 public?abstract?class?Shape?{ public?abstract?double?perimeter(double?i,double?j); public?abstract?double?Area(double?m,double?n); } //子類Circle public?class?Circle?extends?Shape?{ @Override public?double?perimeter(double?i,?double?j)?{ //?TODO?Auto-generated?method?stub double?p?=?2?*?i?*?j; return?p; } @Override public?double?Area(double?m,?double?n)?{ //?TODO?Auto-generated?method?stub double?s?=?m?*?n?*?n; return?s; } } //子類Rectangle public?class?Rectangle?extends?Shape?{ @Override public?double?perimeter(double?i,double?j)?{ //?TODO?Auto-generated?method?stub double??p?=?2*(i+j); return?p?; } @Override public?double?Area(double?m,double?n)?{ //?TODO?Auto-generated?method?stub double?s?=?m*n; return?s; } } //測試類 import?java.util.*; public?class?Inital?{ public?static?void?main(String[]?args)?{ //?TODO?Auto-generated?method?stub Scanner?scanner?=?new?Scanner(System.in); Shape?a?=?new?Rectangle(); Shape?b?=?new?Circle(); for(?int?i?=0?;i?<=?1;?i++){ double?m=0; double?n=0; if(i?==?0){ System.out.println("count?Rectangle,Please?input?length?and?width"); System.out.println("length:"); m?=?scanner.nextDouble(); System.out.println("width:"); n?=?scanner.nextDouble();? double?p?=?a.perimeter(m,?n); double?s?=?a.Area(m,?n); System.out.println("Rectangle's?perimeter?:"+p); System.out.println("Rectangle's?Area:"+s); } if(i?==?1){ System.out.println("count?Circle,Please?input?radius"); // System.out.println("PI:"); // m?=?scanner.nextDouble(); System.out.println("radius:"); n?=?scanner.nextDouble();? double?p?=?b.perimeter(Math.PI,?n); double?s?=?b.Area(Math.PI,?n); System.out.println("Circle's?perimeter?:"+p); System.out.println("Circle's?Area:"+s); } } } }2015-02-12
可以使用可變長參數試試