2016-02-27 98 views
0
abstract class A 
{ 
abstract void callme(); 
} 
class B extends A 
{ 
void callme() 
{ 
    System.out.println("this is callme."); 
} 
public static void main(String[] args) 
{ 
    B b=new B(); 
    b.callme(); 
} 
} 

//如果這可以通過重寫爲什麼要用抽象爲什麼我們要使用抽象類或方法,爲什麼不重寫超類方法呢?

class Animal 
{ 
Animal myType() 
{ 
    return new Animal(); 
} 
} 

class Dog extends Animal 
{ 
Dog myType()  //Legal override after Java5 onward 
{ 
    return new Dog(); 
} 
} 
+2

你的兩個例子似乎沒有關係。當抽象類提供的代碼不是特定於子類實現的代碼時,通常會使用抽象類,但包含隨後在子類中實現的抽象方法。 –

+0

@JonSkeet,說完這一切。也許你應該閱讀一些[Java文檔相關](https://docs.oracle.com/javase/tutorial/java/IandI/abstract.html)和[this](http://stackoverflow.com/questions/) 24626/abstraction-vs-information-hiding-vs-encapsulation)文章。 – aribeiro

+0

注意您不能使用抽象類創建對象。 'new A()'無效,但'new Animal()'有效 – Kachna

回答

0

抽象類主要用來綁定的子類來給它的抽象方法體來完成。 其中,在非抽象類中,您不是將子類綁定到其方法的主體。在類B中它強制給予callme()的主體;

其中作爲

類狗其不是強制性的,得到的myType的主體();

相關問題