要知道这个你必须要知道他们而这的用法
一、this用途:
一是引用隐式参数,二是调用该类其他的构造器。
二、super用途:
一是调用超类的方法,二是调用超类的构造器
三、用法举例
[java] view plaincopyprint?package com.test.xqh;
public class Manage extends Employee {
private String sex;
public Manage(String name, int age, String sex) {
super(name, age); // super用途2,调用超类的构造器
this.setSex(sex);
}
public String getName() {
return super.getName() + "HHHH"; // super用途1, 调用超类的方法
}
public void setSex(String sex) {
this.sex = sex;
}
public String getSex() {
return sex;
}
public void say() {
System.out.println("***");
}
public static void main(String[] args) {
Employee[] e = new Employee[2];
e[0] = new Employee("张三", 22);
e[1] = new Manage("李四", 22, "男");
System.out.println(e[0].getName());
System.out.println(e[1].getName());
}
}
class Employee {
private String name;
private int age;
public Employee(String name, int age) {
this(); // this用途2,调用该类的构造器(此例为默认的构造器)
this.name = name; // this用途1,引用隐式参数
this.age = age; // this用途1,引用隐式参数
}
public Employee() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
package com.test.xqh;
public class Manage extends Employee {
private String sex;
public Manage(String name, int age, String sex) {
super(name, age); // super用途2,调用超类的构造器
this.setSex(sex);
}
public String getName() {
return super.getName() + "HHHH"; // super用途1, 调用超类的方法
}
public void setSex(String sex) {
this.sex = sex;
}
public String getSex() {
return sex;
}
public void say() {
System.out.println("***");
}
public static void main(String[] args) {
Employee[] e = new Employee[2];
e[0] = new Employee("张三", 22);
e[1] = new Manage("李四", 22, "男");
System.out.println(e[0].getName());
System.out.println(e[1].getName());
}
}
class Employee {
private String name;
private int age;
public Employee(String name, int age) {
this(); // this用途2,调用该类的构造器(此例为默认的构造器)
this.name = name; // this用途1,引用隐式参数
this.age = age; // this用途1,引用隐式参数
}
public Employee() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
因为在构造的时候只需要调用父类的super()作为初始化父类一次,如果super(...)和this(...)同时出现的话,那么就会出现初始化父类两次的不安全操作,因为当super(...)和this(...)同时出现的时候,在调用完了super(..)之后还会执行this(..),而this(...)中又会自动调用super(),这就造成了调用两次super()的结果(这是假设super(...)和this(...)同时出现时候,super(...)在this(...)前面,反过来出现也一样)
|