对“java子类不能继承父类构造方法“的理解

子类构造函数,什么时候需要写,什么时候可以不写?

  1. 父类没写默认构造器,也没有有参构造器,子类以不写构造器。(此时编译器,有自动添加默认构造器。)
	public class Test {
    
    
    class Father{
    
    
        public String name;
    }

    class Son extends Father {
    
    

    }

    public static void main(String[] args) {
    
    

    }
	}
  1. 父类有默认构造器,但是没有有参构造器,子类也可以不写构造器。(此时编译器,自动添加。)
public class Test {
    
    
    class Father {
    
    
        public String name;
        Father() {
    
    
            this.name = "xxx";
        }
    }

    class Son extends Father {
    
    

    }

    public static void main(String[] args) {
    
    

    }
}
  1. 父类有默认构造器,也有有参构造器,子类可以不写构造器。(此时编译器,自动添加。)
public class Test {
    
    
    class Father {
    
    
        public String name;
        Father() {
    
    
            this.name = "xxx";
        }

        Father(String n) {
    
    
            this.name = n;
        }
    }

    class Son extends Father {
    
    

    }

    public static void main(String[] args) {
    
    

    }
}
  1. 父类没有默认构造器,只有有参构造器,此时子类必须添加构造器。否在会提示:父类没有可用的构造函数。

    必须写一个构造函数,来显示调用父类的某个有参构造器。如下:
public class Test {
    
    
    class Father {
    
    
        public String name;

        Father(String n) {
    
    
            this.name = n;
        }
    }

    class Son extends Father {
    
    

        Son(String n) {
    
    
            super(n);
        }
    }

    public static void main(String[] args) {
    
    

    }
}

总结下:
父类没有默认构造器,只有有参构造器,此时子类必须添加构造器,显示调用父类构造器。

为什么要这么设计?

父类没有默认构造器,只有有参构造器,说明父类对象生成时,必须要传递一个参数。这个参数从哪里传入了?只能是子类构造器,所以子类必须要有一个构造器,有参无参都行。

子类已经继承父类,为什么就不能继承父类的构造器了?子类直接用父类的构造器不就行了?

构造函数名要求和类名一致,子类如果继承了父类的构造函数,那这个函数的名字和子类就不一样了。不符合构造函数的要求。

子类能不能继承父类的构造函数

如果想从.class文件入手,梳理构造函数,可以参考:
Java的构造函数与默认构造函数(深入版)

猜你喜欢

转载自blog.csdn.net/zhangjin1120/article/details/131113337