簡體   English   中英

Java繼承調用對象的超類的方法

[英]Java inheritance call object's superclass's method

我有一個A類:

A
- void method1

並且擴展A的B類覆蓋A的方法1:

B->A
- void method1

稍后,我創建了一個引用為A的B實例:

A a = new B();

我想在特定情況下使用方法1的A版本。 有沒有辦法稱之為,如:

a.super.method1();

編輯:

為了消除任何困惑,這是我想要實現的目標:

我有一個名為Account的父類。 在那之下我有3個子類,SavingsAccount,CheckingAccount和MoneyMarketAccount。

其中每一種都有自己的存款/取款方式,這些方法具有與之相關的特定費用。

有一個名為Bank的管理器類,其中包含一個Account對象的ArrayList。 我有一個方法,無法void transfer ,我試圖創建,這將允許我拿兩個帳戶,並在他們之間轉移資金。

如果沒有足夠的資金或其他錯誤,有時不同的方法會拋出異常,所以如果兩個賬戶中的一個賬戶失敗,我需要能夠撤銷交易。

這是我遇到問題的地方:

如果to-account無法收到存款,我需要重新存入從from-account提取的款項,但是to-account可能有存款費用,所以我想撥打父賬戶類的存款方式,就像它一樣沒有任何費用; 但是,根據我收到的評論和答案,我可能只需編寫另一種不被覆蓋的方法,只需執行與帳戶存款相同的操作即可。

你不能直接使用super,因為它只存在 B 內部 。但是你可以間接地使用它:

public B extends A {
  public void method1() {
    // B's method 1
  }

  public void superMethod1() {
     super.method1();
  }
}

因此,如果一個類使用B變量,那么他們可以調用superMethod1()並獲取A的method1。

但話雖如此,這對A變量不起作用,因為您的代碼當前已設置,而不是沒有強制轉換。

即,你可以這樣做:

B b = new B();
b.superMethod1();

但是這對你的設置不起作用:

A a = new B();
// not without casting
((B)a).superMethod(); // ugh... ugly! AND dangerous!

請注意,你的問題,雖然本身並不壞,但表明可能是一個糟糕的程序設計和需要它的代碼至少對我來說,代碼味道很差。

您只能在課堂上使用superthis關鍵字。 不能在該課程之外使用它們。

所以在課堂上你可以做(​​模擬代碼)

class A {    
  someMethod(){    
  super. someMethod()
 }
}

你不能從客戶端代碼那里做到這一點,即。 調用方法的代碼。 您只能在子類方法中執行此操作

super.method1();

並且僅適用於層次結構的一個級別。

使用A a = new A(); 或者你可以從B的方法1調用super.method1(),如果你想要像A a = new B();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM