2013-07-03 399 views
-6

抽象方法具有它沒有主體的屬性。所以當具體類擴展抽象類時,它必須實現該抽象方法。在Java中重寫抽象方法

所以我的問題是如何可以重寫抽象方法?

+5

在問這樣的基本問題之前,你應該已經完成​​了教程http://docs.oracle.com/javase/tutorial/java/IandI/abstract.html – AurA

+0

http://stackoverflow.com/questions/1005898/java -hould-i-add-an-override-annotation-when-implementation-abstract-methods – sanbhat

回答

10

具有抽象方法的抽象類。

該方法也用abstract標記,並沒有正文。

public abstract class A { 
    public abstract void method(); 
} 

具體化在擴展抽象類AB。此外,該方法丟失關鍵字abstract並獲取正文。

public class B extends A { 
    @Override 
    public void method() { 
     System.out.println("Hello"); 
    } 
} 
+0

這裏是非抽象方法重寫抽象方法,所以我對它有點混淆。 – user2151689

+0

是的,'抽象'是一種「符號」,這種方法必須在未來的某些方法中被覆蓋。覆蓋的方法必須具有相同的方法簽名,但是會丟失「abstract」關鍵字。 – darijan

2

只需提供該方法的實現,爲其提供一個正文。

public abstract class Base { 
    public abstract void someMethod(); // no implementation here 
} 

public class Sub extends Base { 
    @Override 
    public void someMethod() { 
    //It is Overridden 
    } 
} 
1

當您在子類中實現超類方法時,它將被覆蓋。所以,即使超類的方法是抽象的,如果你在子類中實現它,它會覆蓋它。

所以,

public class SuperClass{ 
    public abstract void someMethod(); 
} 

public class SubClass{ 
    public void someMethod(){ 

      System.out.println("subclass method"); 

    } 
} 
1

Foo.java

public abstract class Foo { 
    public abstract void doStuff(); 
} 

Bar.java

public class Bar extends Foo { 
    @Override 
    public void doStuff() { 
     // doStuff 
    } 
} 
1

抽象方法可以被覆蓋,就像覆蓋其他正常的方法,通過提供一個實現。

1

這是與任何其他方法重寫:

public abstract class AbstractClass { 
    public abstract void abstractMethod(); 
} 

... 

public class ConcreteClass { 

    @Override 
    public void abstractMethod() { 
     .... 
    } 
} 
2
public abstract class A { 
    public abstract String getValue(); 
} 

public class B extends A { 

    @Override 
    public String getValue(){ 
     return "I'm Overriden"; 
    } 
} 

這就像在其他任何類相同。

2
public abstract class BaseClass { 
    public abstract void doSomething(); 
} 

public class ConcreteClass extends BaseClass { 
    @Override 
    public void doSomething() { 
     System.out.println("Hi!"); 
    } 
} 

public class AnotherConcreteClass extends BaseClass { 
    @Override 
    public void doSomething() { 
     System.out.println("Hello!"); 
    } 
} 

是得到執行將取決於運行時類型你是在調用時doSomething對象的doSomething方法的實現。

相關問題