[英]How to use same variable name for different classes
我正在嘗試使用變量實例化不同的類。 例如:
Object blah;
class1 ex1;
class2 ex2;
public void test(int i){
if(i == 1){
blah = new class1();
} else {
blah = new class2();
}
}
我將如何在Java中執行此操作?
編輯1:抱歉,讓我現在嘗試更加具體。
假設我有三個班級:A,B和C。
A是我的主要人並在其中使用B。B使用C。
問題是這樣的:
public class B1{
C instanceC;
public B1(){
instanceC = new C();
//uses a method of instanceC.
}
}
public class B2{
C instanceC;
public C(){
instanceC = new C();
//uses a method of instanceC.
}
}
然后在A:
public class A implements MouseListener{
Object blah;
B1 instanceB1;
B2 instanceB2;
public void test(int i){
if(i == 1){
blah = new B1();
} else {
blah = new B2();
}
}
//I left the other mouseListener methods blank
public void mouseReleased(int i){
blah.instanceC.someMethod();
}
public static void main(String[] args) {
A instanceA = new A();
A.test(1);
}
}
編輯2:當我嘗試使用instanceC.someMethod()或instanceC.someVariable時,它給了我一個空指針異常。
我希望這足夠清楚。 如果令人困惑,請告訴我,我將看看是否可以進一步簡化。 感謝已經幫助過的人們!
如果blah
被聲明為Object
,那將是可行的(除非您使用帶有實例而不是類的new
),但是在其上使用Object
任何方法或屬性將很尷尬。
通常的方法是通過interfaces 。 接口定義了class1
和class2
的共同特征,然后使用該接口聲明blah
。 然后,您可以輕松地使一個或另一個具體類成為一個類,並可以使用它們的共同特征。
例如:
interface Foo {
void someCommonMethod();
}
class Class1 implements Foo {
void someCommonMethod() {
// implementation
}
}
class Class2 implements Foo {
void someCommonMethod() {
// implementation
}
}
public void test(int i){
if(i == 1){
blah = new Class1();
} else {
blah = new Class2();
}
// ...use `someCommonMethod` on `blah`...
}
您的代碼永遠不會編譯。
C()
是什么,簽名就像構造函數一樣,但名稱卻不同。 如果不是構造函數,那么如何確保在B1
和B2
初始化instanceC
? A instanceA = new instanceA();
? 應該是A instanceA = new A();
? 然后調用instanceA.test()
? 如果我的假設是正確的,那么您正在嘗試訪問兩個不同對象的instanceC
,問題是,“是否始終將其命名為instanceC?”,如果是這種情況,請使用反射,並按名稱查找字段。
如果要遍歷類的所有字段並對其進行處理,請再次使用反射並遍歷字段,檢查其類型並為適當的字段類型調用該方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.