2016-02-27 66 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的主体();

相关问题