java继承相关问题。简单代码如下

 public class Test extends Base{
    public void test(){
        System.out.println("test");
    }
    public static void main(String[] args){
        Test test=new Test();
    }
}

class Base{
    public Base(){
        test();
    }
    public void test(){
        System.out.println("base");
    }
}

调用的是子类中的test( )方法,输出test,创建子类对象,调用父类构造器时,调用的为什么是子类的test()方法?

因为当前的this对象就是子类的实例,子类的构造函数实际上是两部分代码父类的构造部分,子类的构造部分,子类的非静态代码块,几个方面的代码组成的。
本质上是子类的方法的,以当前this实例的方法就是子类的test()

子类没有调用父类的构造方法,所以自动调用父类无参的构造方法,执行test()方法
Base test = new Test();
Test test = new Test();
两个方法都市调用子类的test()方法,因为子类重写了父类的test()方法

子类没有构造方法,所以使用缺省构造方法,如
public Test (){
super();
}
这样就使用了父类的构造方法,子类中重写了父类的方法,所以输出的都是test

子类中重写了test方法,创建的子类的对象,调用的当然是子类的方法了。

感觉只是子类单纯的重写父类的方法

这是代码执行顺序的问题,首先子类在创建对象的时候发现没有构造去调用父类的构造,调用父类构造的时候发现需要调用test方法,首先会在子类中查找是否有此方法,有调用,没有到父类中查找然后调用!

你这创建的是子类对象,默认调用自己的构造方法,可以用super.调父类的

子类的引用指向子类的实例,子类被实例化之前会先实例化父类,(父亲先出来才有儿子),子类重写了父类的方法,所以打印的是子类。