标签:his 类构造 zhang protected ring oid extend ati 插入
public class Humans { Humans(){ System.out.println("我是人!"); } } public class Student extends Humans{ Student(){ //无参数构造器 System.out.println("我是学生!"); } } public class test { public static void main(String args[]){ new Student(); } }
结果是:
我是人! 我是学生!
2.当构造器有参数时,那就必须使用关键字super现实地编写调用基类构造器的代码,并且匹配适当的参数列表。
public class Humans { private String name; Humans(String name){ System.out.println("我是叫"+name+"的人"); } public String getName() { return name; } public void setName(String name) { this.name = name; } } public class Student extends Humans{ //派生类 private String name; Student(String name){ super(name); //注释掉super(name);将会报错。原因是派生类必须调用基类构造器。因为实例化派生类时,
// 基类也会被实例化,如果不调用基类的构造器,基类将不会被实例化。 System.out.println("我是学生!"); } public String getName() { return name; } public void setName(String name) { this.name = name; } } public class test { public static void main(String args[]){ new Student("zhangsan"); } }
输出为:
我是叫zhangsan的人 我是学生!
3.如果派生类定义了和基类一样的属性或方法,将覆盖基类的属性和方法。
public class Student extends Humans{ public String sex; protected int age ; private String name; Student(String sex ,String name,int age){ super(sex,name,age); } public String getName() { return name; } public void setName(String name) { this.name = name; } }
输出:
null null 0
因为只有基类的属性在构造时赋值了,派生类的没有,当访问这些属性时,访问的是派生类的属性,所以全为null或者0。
只有当派生类的属性也被实例化时,才会得到属性的值。代码改为如下:
public class Student extends Humans{
public String sex;
protected int age ;
private String name;
Student(String sex ,String name,int age){
super(sex,name,age);
this.sex = sex;
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
才能输出:
男 zhangsan 10
标签:his 类构造 zhang protected ring oid extend ati 插入
原文地址:https://www.cnblogs.com/yz123/p/11914586.html