你用我的代码跑一下就知道了,希望对你有用,好好加油!
public class Test { //测试类
public static void main(String[] args) {
Son son=new Son(); //子类的构造方法会默认继承父类的构造方法
}
}
class Father { //父类
public Father() {
System.out.println("我就是父类方法!");
}
}
class Son extends Father { //子类继承父类
public Son() {
//super();其实系统会在子类构造方法默认调用父类的构造方法
System.out.println("我是子类方法!");
}
public void diaoYongFuMehtod(){
super(); //报错,这里不能调用父类构造方法,父类构造方法只能被子类构造方法调用,不能被子类的普通方法调用
/**
* 解释原因:
* 假设这个父类构造方法是可以在子类普通方法中被调用的,也就是new Son().diaoYongFuMehtod();这里的意思就是先加载Son类创建好
* Son类对象然后调用diaoYongFuMehtod方法,然后diaoYongFuMehtod方法里的super()是加载Father类,总体类加载顺序就是
* Son类-->Father类.而其实虚拟机真正的加载方式是先加载Father类,再加载子类的.(用现实生活举例:没有父亲这个人出现哪会有儿子呢,
* 其实java语言很多都是符合伦理道德的)
* */
}
}
public class Test { //测试类
public static void main(String[] args) {
Son son=new Son(); //子类的构造方法会默认继承父类的构造方法
}
}
class Father { //父类
public Father() {
System.out.println("我就是父类方法!");
}
}
class Son extends Father { //子类继承父类
public Son() {
//super();其实系统会在子类构造方法默认调用父类的构造方法
System.out.println("我是子类方法!");
}
public void diaoYongFuMehtod(){
super(); //报错,这里不能调用父类构造方法,父类构造方法只能被子类构造方法调用,不能被子类的普通方法调用
/**
* 解释原因:
* 假设这个父类构造方法是可以在子类普通方法中被调用的,也就是new Son().diaoYongFuMehtod();这里的意思就是先加载Son类创建好
* Son类对象然后调用diaoYongFuMehtod方法,然后diaoYongFuMehtod方法里的super()是加载Father类,总体类加载顺序就是
* Son类-->Father类.而其实虚拟机真正的加载方式是先加载Father类,再加载子类的.(用现实生活举例:没有父亲这个人出现哪会有儿子呢,
* 其实java语言很多都是符合伦理道德的)
* */
}
}
你将以下代码运行看一下,可以发现在子类中会隐式的调用父类的无参构造器
class A{
public A(){
System.out.println("A构造")
}
}
class B extends A{
public B(){
//super();//这里会有一个隐式的调用
System.out.println("B构造")
}
}
class Ma{
public static void main(String[] args){
B b =new B();
}
}