2012-02-05 97 views
2

我想要做這樣的事情在Java中:的java在子類中創建構造函數與超類的參數

超類:

public class mysupclass { 

    public mysupclass(int x, int y) { 
     // code here 
    } 
} 

子類:

public class mysubclass extends mysupclass { 

    public mysubclass (mysupclass a, mysupclass b) { 
     // code here 
    } 
} 

我如何定義mysupclass爲我的子類構造函數的參數? 我是否必須在子類構造函數中使用super,並且應該放入超級類?

在此先感謝!

+0

什麼是用例? – Bohemian 2012-02-05 09:42:39

回答

0

作爲一個很好的通用規則,超類應該知道子類的從不知道

考慮重新設計您的類層次結構,或者使用抽象(如實現接口的子類和期望在該接口實例中使用的超類)。

+0

超類具有*不知道子類 - 查看mysupclass的文本;它沒有提到mysubclass。 – 2012-02-05 07:39:42

+0

老實說喬恩是對的。我沒有告訴任何人關於子類:) 感謝您回答壽。 – Spyros 2012-02-05 08:11:56

1

您肯定需要使用super來調用超類的構造函數 - 但您想使用的參數取決於您。我們不知道這些課程意味着什麼。

就Java而言,子類構造函數具有超類類型參數的事實基本上是不相關的 - 這只是巧合。您需要遵循Java的所有常規規則,在這種情況下,這意味着鏈接到超類構造函數。由於在超類中沒有無參數構造函數,因此必須明確執行此操作,爲xy提供值。

+0

嗨,謝謝你的答案。 任何我應該用超級的技巧? public mysubclass(mysupclass a,mysupclass b){超級(a,b); } 它不會工作:( – Spyros 2012-02-05 07:56:03

+1

@Spyros:嗯,不,因爲superconstructor被聲明接受兩個int值,並且你試圖傳入兩個mysupclass值,我們不知道這些類是什麼(或者任何一個類中的構造函數參數)都是用來表示的,所以我無法建議值。 – 2012-02-05 07:57:34

+0

再次感謝您的迴應。如果mysupclass是一對int,那麼mysubclass是int的2個pers,所以a和b可以(0,0)或(1,2)等是否有幫助? – Spyros 2012-02-05 08:10:15

-1

您可能想要添加一個默認的構造函數作爲通用編碼實踐說,如果您重載了默認構造函數,那麼您應該將其添加回自己。 您可能想在繼續之前對java構造函數進行一些研究。

supclass:

public class mysupclass { 

    public mysupclass(int x, int y) { 
     // code here 
     // Overloaded constructor. 
    } 
} 

子類:

public class mysubclass extends mysupclass { 

    public mysubclass() { 
     super(mysupclass a, mysupclass b); 
     // code here 
    } 
} 
0

那麼我覺得你shud考慮編輯烏爾問題,什麼mysupclass在context.As代表提供更多的細節別人已經解釋烏爾努力將mysupclass作爲參數傳遞給mysupclass構造函數,該構造函數實際上期待int值作爲參數。顯然,如果您沒有將int value傳遞給construc這個類不能被實例化,因爲你提供了一個參數化的構造函數,它不會調用默認的構造函數。請詳細說明我們的要求是什麼?我的意思是你想通過傳遞那些mysupclass作爲參數來做什麼?因爲使用super.variable=value;而不是直接傳遞mysupclass作爲參數,可以更容易地設置要在構造函數中傳遞的變量。

0

參考你: how to inherit Constructor from super class to sub class

解決方案如下:

超類:

public class mysupclass { 

    public mysupclass(int x, int y) { 
     // code here 
    } 
} 

子類:

public class mysubclass extends mysupclass { 

    public mysubclass (mysupclass a, mysupclass b) { 
     //call to constructor of superclass 
     mysupclass(a,b); 
     // code here 
    } 
} 
0

在這裏,您是如何可以做一個例子:

超類(Point2D.java):

package test_superArg; 

public class Point2D { 
    private float x; 
    private float y; 

    public Point2D(float x, float y) { 
     this.x = x; 
     this.y = y; 
     System.out.println("Parent class constructor:"); 
     System.out.println("X = " + this.x + ", Y = " + this.y); 
    } 
    public float getX() {return x;} 
    public float getY() {return y;} 
    public void setX(float x) {this.x = x;} 
    public void setY(float y) {this.y = y;} 
} 

子類(Point3D.java):

package test_superArg; 

public class Point3D extends Point2D { 
    private float z; 

    public Point3D(Point2D point2d, float z) { 
     super(point2d.getX(), point2d.getY()); // must be the 1st statement in a constructor 
     System.out.println("After calling super()"); 
     this.z = z; 
     System.out.println("Child class constructor:"); 
     System.out.println("X = " + getX() + ", Y = " + getY() + ", Z = " + this.z); 
    } 
    public float getZ() {return z;} 
} 

主類(Start.java):

package test_superArg; 

public class Start { 

    public static void main(String[] args) { 
     System.out.println("Creating parent type class object..."); 
     Point2D point2d = new Point2D(2.0f, 4.0f); 
     System.out.println("Creating child type class object..."); 
     Point3D point3d = new Point3D(point2d, 8.0f); 
     System.out.println("Changing child class type object..."); 
     point3d.setX(10.0f); 
     point3d.setY(20.0f); 
     System.out.println("Parent type class object:"); 
     System.out.println("X = " + point2d.getX() + ", Y = " + point2d.getY()); 
     System.out.println("Child type class object:"); 
     System.out.print("X = " + point3d.getX() + ", Y = " + point3d.getY()); 
     System.out.println(", Z = " + point3d.getZ()); 
    } 
} 

輸出:

Creating parent type class object... 
Parent class constructor: 
X = 2.0, Y = 4.0 
Creating child type class object... 
Parent class constructor: 
X = 2.0, Y = 4.0 
After calling super() 
Child class constructor: 
X = 2.0, Y = 4.0, Z = 8.0 
Changing child class type object... 
Parent type class object: 
X = 2.0, Y = 4.0 
Child type class object: 
X = 10.0, Y = 20.0, Z = 8.0 
0

正如Jon Skeet已經指出的那樣,您將不得不在子類構造函數中使用super(只要沒有定義默認構造函數,Java編譯器將強制您這樣做)。什麼作爲超級參數傳遞是由你來決定的。

我會假設你的mysupclass是一個點,mysubclass是一個矩形。作爲默認行爲,您可以使用第一個點作爲初始化mysupclass的第一個點。

public class mysubclass extends mysupclass { 
    public mysubclass (mysupclass a, mysupclass b) { 
     super(a.getX(), a.getY()); 
     this.x2 = b.getX(); 
     this.y2 = b.getY(); 
     // anything else... 
    } 
} 
相關問題