子类继承父类时,创建对象,构造方法的调用问题
程序员文章站
2022-05-14 09:10:03
...
在学习继承的时候,遇到一些小问题,这里总结一下,有错误望指正:
先来看一段代码:
//标准父类
class Father{
//成员变量
private String name;
private int age;
//构造方法
//空参
public Father(){
}
//有参
public Father(String name,int age){
this.name = name;
this.age = age;
}
//set&get方法
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public void setAge(int age){
this.age = age;
}
public int getAge(){
return age;
}
}
//子类
class Son extends Father{
}
//测试类
public class test{
public static void main(String[] args){
//创建子类对象
Son s = new Son();
//用set方法赋值
s.setName("张三");
s.setAge(20);
//输出
System.out.println(s.getName+","+s.getAge);
}
}
然后通过set方法赋值.(注意:这里子类在通过无参构造初始化之前会先默认调用父类的无参构造对父类成员进行初始化)
但子类若想使用有参构造对成员变量进行初始化:
//测试类
public class test{
public static void main(String[] args){
//创建子类对象
Son s = new Son("张三",20); //此处会显示错误
System.out.println(s.getName+","+s.getAge);
}
}
该怎么办呢? 那我们只能在子类中手动写出有参构造:
//子类
class Son{
public Son(){
//为了可以使用无参,我们把无参也写上
}
public Son(String name,int age){
this.name = name;//会显示错误
this.age = age;//会显示错误
}
}
//测试类
class Test{
Son s = new Son("张三",20);
System.out.println(s.getName+","+s.getAge);
}
//子类
class Son{
public Son(){
//为了可以使用无参,我们把无参也写上
}
public Son(String name,int age){
this.setName = name;
this.setAge = age;
//也可以用super.setName 和 super.setAge
//也可以用 super(name, age) 调用父类有参构造对父类成员进行初始化(建议)
}
}
上一篇: 继承构造函数调用顺序_C ++中带有继承的构造函数调用的顺序
下一篇: L2-005 集合相似度
推荐阅读