Xiang Li-哈尔滨理工大学

文章目录

  • 1 super
  • 2 this

1 super

1、子类在构造方法中显示调用父类构造方法
super可以在子类的构造方法中显示调用父类的构造方法;并且这行代码必须出现在子类构造方法的第一行。原因:因为父类构造方法没有执行之前父类的属性和方法还没有被创建,则子类不能继承父类的属性和方法,因此子类的构造方法不能被执行。

/**

  • 子类:构造方法的第一行要保证显示或者隐式的调用构造方法
  • @author Administrator

*/
public class Teacher extends Person {
//继承自父类的空构造函数
public Teacher() {

}
public Teacher(String name, int age, String gender) {        //1. 出现在子类构造函数的第一行,用于调用父类的构造方法
    super(name, age, gender);        
}
private String course;
public void teach() {
    System.out.println("教...");
}

}

2.可以在子类中充当临时父类对象
可以在子类内部代表父类对象,从而在子类中访问父类的属性和方法。

class Person01 {
private String name;
private int age;
public void say() {
System.out.println(“人说…”);
return null;
}
public void eat() {
System.out.println(“人吃…”);
}
}
class Teacher01 extends Person01 {
@Override
public C say() {
System.out.println(“老师在一本正经的说…”);
return null;
}
//注解的作用:防止开发者误写,起到提示作用
@Override
public void eat() {
System.out.println(“洗个手”);
//2. super作用:super类似于父类的虚拟对象
super.eat();
System.out.println(“抽根烟…”);
}
}

2 this

1、代表当前对象
在类的内部永远代表正在执行此代码的对象;在成员方法和构造方法内部,都可以通过this来明确访问类中的成员属性和成员方法。

public class Person03 {
String name;
int age;
//构造代码块:直接在类中编写一对大括号,构造代码块可以访问到之前定义的属性
{
System.out.println(“构造代码块!” + name);
}

{ 
    say();
    
    System.out.println("构造代码块2!" + this);
}

public Person03(){
    System.out.println("构造方法!");
}
public Person03(String name, int age) {        //1. 指向无参构造方法
    this();       //2. 代表正在执行此代码的对象
    this.name = name;
    this.age = age;
}
void say() {
    System.out.println("成员方法说动作");
}
{ 
    say();
    System.out.println("构造代码块3!");
}
public static void main(String[] args) {
    Person03 p = new Person03();
    p.say();
    //匿名创建对象:创建对象只会用一次并且立即使用,而不用赋值给一个引用,即为创建了一个匿名对象
    new Person03().say();
}

}
、指向某个构造方法
在构造方法内部通过this(参数列表),可以调用其他构造方法。

注意:使用这种用法时,this()必须出现在当前构方法的第一行。

你可能感兴趣的:(Xiang Li-哈尔滨理工大学)