新手----关于接口,抽象类的一个问题?

public class Test {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    B b=new B();
    b.hun();
    System.out.println(b instanceof I);

}
}
interface I{
public void fun();
public void gun();
public void hun();
}
abstract class A implements I{
public void fun(){}
public void gun(){
System.out.println("抽象类A中的fun()方法");
}
}
class B extends A{
public B(){
super.gun();
}//衍生类对抽象超类方法的调用,为什么会在构造块中才能调用,而在其他地方调用就会出错呢?
public void hun(){
System.out.println("非抽象类B中的hun()方法");
}
}

5个回答

不知道你的具体问题是什么;
如果要了解接口与抽象类的区别请看:
http://blog.csdn.net/hackage4619/article/details/53485537

没有提出具体问题,不知道该如何说……

public class JunitTestDemo01 {
public static void main(String[] args) {
B b=new B();
b.hun();
// System.out.println(b instanceof I);
}
}

interface I {
public void fun();
public void gun();
public void hun();
}

abstract class A implements I{
public void fun(){}
public void gun(){
System.out.println("抽象类A中的fun()方法");
}
}

class B extends A{
/*public B(){
super.gun();
}*///衍生类对抽象超类方法的调用,为什么会在构造块中才能调用,而在其他地方调用就会出错呢?

public void hun(){
    super.gun();
    System.out.println("非抽象类B中的hun()方法");
}

}

结果是:
抽象类A中的fun()方法
非抽象类B中的hun()方法

得出结论:
(1)子类在继承抽象类时,可以直接调用抽象类的成员方法,并不会像你想象的一定要在构造器中调用。
(2)其实你没有必要用super.gun();方式来调用抽象类方法,
因为在继承的过程中,抽象类的方法已经被继承到子类了,意思就是说在子类中已经有这个方法了,可以直接调用,如gun();

你是要问main函数执行的时候会调用哪些方法?

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问