2015-02-08 56 views
0
class Vertebrates { 
    public void move() { 
    System.out.println("Move"); 
    } 
} 
class Mammel extends Vertebrates { 
    public void move() { 
    System.out.println("Walk"); 
    } 
} 
class Dog extends Mammel{ 
    public void move() { 
    System.out.println("Walk on haws"); 
    } 
} 
class Demo { 
    public static void main(String args[]) { 
    Dog d = new Dog(); 
    //insert code here 
    } 
} 

我如何可以調用移動脊椎動物()方法,通過使用類型狗的參考d,採用super語句或東西的參考?調用從超的方法用一個派生一個

+0

可能duplica [在Java中,我如何從派生類中的重載方法調用基類的方法?](http://stackoverflow.com/questions/268929/in-java-how-do-i-call-a -base-class-method-from-the-overriding-method-in-der-der-012) – Joe 2015-02-08 12:58:45

+0

可能的重複[爲什麼是super.super.method();不允許在Java?](http://stackoverflow.com/questions/586363/why-is-super-super-method-not-allowed-in-java) – Kenster 2015-02-08 14:02:45

+0

狗可以調用'super.move()'來訪問哺乳動物的「移動()」。狗不能直接進入脊椎動物的「move()」。 – Kenster 2015-02-08 14:04:34

回答

0

你不應該這樣做!有一個原因,我們有OOP和封裝!這類問題通常是一個設計問題。你應該重新考慮你的選擇,並問問你自己這些方法是否應該以不同的方式實施。

(還有一種方法:

class Dog extends Mammel{ 
    public void move() { 
    System.out.println("Walk on haws"); 
    try { 
    this.getClass() 
     .getSuperclass() 
     .getSuperclass() 
     .getMethod("move", new Class[]{}) 
     .invoke( this.getClass().getSuperclass().getSuperclass().newInstance() ,new Object[]{} ); 
    } catch (IllegalAccessException | InvocationTargetException | InstantiationException | NoSuchMethodException e) { 
     e.printStackTrace(); 
    } 
    } 
} 
class HelloWorld { 
    public static void main(String args[]) { 
    Dog d = new Dog(); 
    d.move(); 
    //insert code here 
    } 
} 

打印:Walk on haws Move

注:這是不是你應該如何使用Java的可能存在,這是需要一些非常具體的邊緣情況,但這些都是非常罕見的。)

0

你可以試試這個

((Vertebrates)d).move(); 
相關問題