关于javaSE继承中super的考究
在对父类非private属性的使用过程中
- super专门用来指代继承过来的属性,在子类没有与父类重名的情况下。实际功能与this并无二异
package gunjo.kirito.union.course;
class ManKind {
int sex;
int salary;
ManKind() {
}
ManKind(int sex, int salary) {
this.sex = sex;
this.salary = salary;
}
public void manOrWomen() {
if (sex == 1) {
System.out.println("man");
}
if (sex == 0) {
System.out.println("women");
}
}
public void employeed() {
if (salary == 0) {
System.out.println("no job");
} else {
System.out.println("job");
}
}
}
class Kids extends ManKind {
int yearsOld;
public Kids(int age, int sex, int salary) {
// this.yearsOld = age;
// this.sex = sex;
// this.salary = salary;
/*
* 上述赋值方法结果如下
* women
* job
*
* 孩子年龄为:10
* 父 or 母1
* 父母工作1
* 父 or 母方法
* man
* 父母工作否 方法
* job
*
* women
* job
*/
this.yearsOld = 11;
super.sex = 1;
super.salary = 0;
/*
* women
* job
*
* 孩子年龄为:11
* 父 or 母1
* 父母工作0
* 父 or 母方法
* man
* 父母工作否 方法
* no job
*
* women
* job
*
* 由上述运行结果:super等同于专门用来指代继承过来的属性,
* 在子类没有与父类重名的情况下。实际功能与this并无二异
*/
}
public void printAge() {
System.out.println("孩子年龄为:" + this.yearsOld);
}
}
public class TestKids {
public static void main(String[] args) {
ManKind m1 = new ManKind(0, 1);
Kids k = new Kids(10, 1, 1);
// 父类本身的
m1.manOrWomen();// 父类正常调用 女
m1.employeed();// 父类正常调用 有工作
// 子类调用继承的
System.out.println();
k.printAge();
System.out.println("父 or 母" + k.sex);// 1
System.out.println("父母工作" + k.salary);// 1
System.out.println("父 or 母方法");
k.manOrWomen();
System.out.println("父母工作否 方法");
k.employeed();
// 看看父类本身是否改变
System.out.println();
m1.manOrWomen();// 父类正常调用 女
m1.employeed();// 父类正常调用 有工作
}
}
- 但是,如果子类属性有与父类属性同名的情况:super专门指代继承的父类成员域,this指代子类本身的成员域,子类除了直接调用父类公共方法以外,依旧无法直接对父类本身的成员域进行修改。