2 hsstc hsstc 于 2013.10.05 12:10 提问

请问下这段代码正确的原因,为什么父类可以调用抽象方法,执行的是子类重写的方法

public class TestA {

public static void main(String[] args) {
    TestA a = new TestA();
    a.start();

}

public void start(){
    B b = new B();
    b.funA();
}

public abstract class A {
    public void funA(){
        System.out.println("I'm funA in A ");
        funB();
    }

    abstract void funB();
}

public class B extends A{

    @Override
    public void funA() {
        super.funA();
    }

    @Override
    void funB() {
        System.out.println("I'm funB in B");
    }

}

}

我就是想问为什么调用父类方法后,父类为什么调用的是子类的方法,不是调用抽象么,抽象不是不能被调用么

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
子类实现父类的抽象方法,父类调用抽象方法
首先,父类有一个抽象方法,并且在自身的其他方法中调用了 public abstract class Baba { public abstract void say(String a); public void dosomething(String a){ say(a); } } 父类 baba,有一个say抽象方法,没有实现,并且在dosomething中调用了。如果
子类继承抽象父类的方法和抽象父类的子类的一些问题
问题:子类继承抽象父类的方法,子类重写全部的父类抽象方法,但是不写方法体。那子类还是抽象的么? 详细:例如 父类public abstract void a();子类写 void a(){}不写方法体 ,可以咩。。必须要实现才可以么。。。?随便写点方法体? 回答: void a(){ } 里面 {} 就是方法体了,算是实现父类方法了。 如果写成 void a(); 这个还是抽象方法。
父类中的抽象方法让子类来实现
父类 public abstract class Baba { public abstract void say(String a); public void dosomething(String a){ say(a); } } 子类 public class Erzi extends Baba { public void say(St
抽象类继承抽象类可以不重写父类的抽象方法,普通类继承抽象类必须重写父类中的抽象方法,实现接口也是同样的道理
抽象类继承,如果子类也是一个抽象类,并不要求一定重写父类方法。如果子类不是抽象类,则要求子类一定要实现父类中的抽象方法。 接口类继承,如果是一个子接口,可以扩展父接口的方法;如果是一个子抽象类,可以部分或全部实现父接口的方法;如果子类不是抽象类,则要求子类一定要实现父接口中定义的所有方法。
创建子类对象时,父类构造函数中调用被子类重写的方法为什么调用的是子类的方法,而被子类重载的方法不会调用?
问题:创建子类对象时,父类构造函数中调用被子类重写的方法为什么调用的是子类的方法,而被子类重载的方法不会调用? public class Basic{ public void add(int i) { System.out.println("Basic add"); } public Basic() { add('a');
子类继承父类,重写父类方法,运用多态时调用重写的方法时调用子类的还是调用父类的?
package 第五天; public class Person { public void say() { System.out.println("我是Person的say方法"); } } 子类Student如下: package 第五天; public class Student extends Person{ //重写了父类的say()方法 @Override
详细讲解方法重写的注意事项,子类与父类代码的执行顺序
打印“abc” public class Test { private static Test test = new Test(); public static int count1; public static int count2 = 0; private Test() { count1++; count2++; } public static
C#下 子类继承父类的虚方法后 使用override重写父类方法 和 不使用override重写有什么区别?
不使用override重写的话 子类new出来的对象 调用该虚方法 是调用的在父类中的虚方法的定义的方法体执行的打个比如吧 就像 你继承父亲的房子 但是房子如果没过户(重写) 户名不是你 所以还是使用父亲的但是过户了就是你的了~! 比喻不是很直观呵呵 子类对象重写后调用的时候就是子类中重写后的方法了 不重写 子类对象调用该虚方法 还是父类中实现的那个方法
关于子类重写父类方法override
 子类重写父类的方法时声明抛出异常不能比父类范围大 在java 中,当我们子类要重写父类中的方法,如果父类的方法有异常声明,那么子类重写这个方法时候,所要声明的异常不应该比父类的大。只能是小等,或者可以没有。原因如下。 假如我们自定意义一个异常: public class MyException extends Exception { public
php中抽象类在其方法中例化其子类来完成对自己方法的调用
初学,遇到这,不能悟出其中的妙处,记录下; 大体的逻辑如下abstract class A { private static $c; final function todo() { //do something } public function init() { $c = new B; } publi