公司开展新的项目,要求使用Java,给一个月的学习时间。(南京一些比较大的公司也开始转向Java,语言环境发了改变,学习Java也是大势所趋。2018年1月26日修改),只好开始学习Java!说好有系统的培训,结果我现在在自学!在学习java的时候,遇到了下面的问题:
1
| Implicit super constructor People() is undefined for default constructor. Must define an explicit constructor
|
大致的意思是父类没有定义默认的无参数的构造方法,父类必须定义一个无参的构造方法。经过一番研究得知,Java中有一下的规则: 因为你的父类已经定义了一个有参的构造函数并且父类中没有默认的无参构造方法,此时编译器不会为你调用默认的构造函数, 当子类继承时,必须在自己的构造函数显式调用父类的构造函数,自己才能确保子类在初始化前父类会被实例化, 如果你父类中有无参的构造函数,子类就不会强制要求调用,即你写的那个就可以通过, 编译器会默认帮你调用父类的构造函数。
修改后的代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| package dmw;
public abstract class People { public String name; protected int age; protected String gender; public People(){} public People(int age,String name,String gender){ this.age = age; this.name =name; this.gender=gender; } public int getAge(){ return this.age; } public String getGender(){ return this.gender; } public abstract boolean setAge(int age); public abstract boolean setGender(String gender); }
package dmw;
public class Student extends People { public Student(int age, String name, String gender) { super(age, name, gender); }
@Override public boolean setAge(int age) { this.age = age; return false; }
@Override public boolean setGender(String gender) { this.gender = gender; return false; } }
|
eclipse的maven配置