[英]Java - Passing object into extended class
假設我有以下兩個公共類:
橢圓類,它將獲取width和height參數。
public class Oval extends Shape{
OvalClass oval;
public Oval(int width,int height){
oval = new OvalClass("first",10);
}
}
還有一個Shape類,它應該具有任何不同的形式(這就是我要擴展它的原因)。
public class Shape {
public void moveLeft(){
//object?
object.posX += 1;
}
}
編輯:
我們對GOval,其他類和move()方法了解不足,無法給出一個很好的答案。
將此其他OvalClass
視為橢圓類:
public class OvalClass {
String name;
int posX;
public OvalClass(String name, int posx){}
}
問題是,如何在Shape類中的橢圓形中創建object
橢圓形( GOval oval
)? 有沒有更好的辦法?
左右移動並非只有橢圓形或正方形才有。 每個形狀都可以向左或向右移動。 因此,Shape應該包含以下功能:
public abstract class Shape {
int x;
int y;
public void moveLeft(){
this.x = x - 1;
}
...
abstract double getArea();
}
為了簡潔起見,我省略了Shape的其他屬性。 想象一下,它還具有上,下,右以及所有您希望所有形狀都具有的形狀。
現在,我們創建一個橢圓形。
public class Oval extends Shape {
int height;
int width;
public Oval(int height, int width, int x, int y) {
super(x, y);
this.height = height;
this.width = width;
}
public double getarea() { return Math.PI * width * height; }
}
請注意,我們不必告訴橢圓形如何左右移動。 因為它擴展了Shape,所以它已經知道如何左右移動。 實際上,我們可以告訴橢圓形像這樣左右移動:
Oval o = new Oval(1, 1, 0, 0);
o.moveLeft();
中提琴! 即使我們沒有在Oval類中定義一個名為moveLeft的方法,我們的Oval仍可以移動。 那就是繼承的美妙之處moveLeft()
方法是由我們的Oval繼承的。
嘗試這樣的事情:
public class Shape {
// Now all Shapes can move()
protected abstract void move(int x, int y);
public void moveLeft(){
//object?
move(-1,0);
}
}
public class Oval extends Shape {
private GOval oval;
public Oval(int width,int height) {
oval = new GOval(0,0,width,height);
}
// Implement move()
protected void move(int x, int y) {
oval.move(x, y);// or whatever method on GOval makes it move()
}
}
HTH
您是否在考慮重寫超類moveLeft()?
public class Oval extends Shape{
GOval oval;
public Oval(int width,int height){
oval = new GOval(0,0,width,height);
}
@Override
public void moveLeft(){
if (oval != null)
oval.move(-1,0);
}
}
您可以使用參數化的類“ Shape<T>
”,該類具有名為“ GOval
”或其他任何幾何形狀的具體幾何體。
考慮這堂課
public class Shape<T> {
T oval;
public void moveLeft(){
oval.move(-1,0);
}
}
及其處理程序
public class Oval extends Shape<GOval>{
public Oval(int width,int height){
oval = new GOval(0,0,width,height);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.