Java学习笔记11(this,super)

this在构造方法间的使用,

public class Person {
    private String name;
    private int age;

    public Person() {
        //this()是调用其他的构造方法
        //this()必须写在构造方法第一行
        this("张三", 20);
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}
public class Test {
    public static void main(String[] args) {
        Person p1 = new Person("张三", 18);
        Person p2 = new Person();
    }
}

super:

  在创建子类对象时,父类的构造方法会先执行,因为子类中所有构造方法的第一行有默认的super();语句父类的构造方法第一行也有隐式的super();语句,所有的类都有一个object祖宗类,父类都继承object类

  super()和this()的区别

  this()是调用自己的构造方法

  super()是调用父类的构造方法

public class Fu {
    public Fu(){
        System.out.println("这是父类构造方法");
  } 
}
public class Zi extends Fu {
    public Zi() {
      //这里有隐式的super();
        System.out.println("这是子类构造方法");
    }
}
public class Test1 {
    public static void main(String[] args) {
        new Zi();
    }
}//运行结果:这是父类构造方法 ,
 //      这是子类构造方法

子类和父类内存:

  创建子类对象对象空间中,划分两个空间,一个存放父类用super标记,一个存放自己用this标记;父类成员变量随子类进入划分给父类的区域,(super标记的区域)

父类的构造方法如果有参数,子类必须写全,

子类可以重载构造方法,不过第一行必须是super();

(上面this中写到,this()必须写在第一行,在这里写到super()必须写在第一行,这里就存在矛盾,因此这两个关键字不能共存,要保证子类的所有构造方法直接或间接调用到父类的构造方法即可,具体如下代码)

父类如果有多个构造方法,子类任意调用一个就行;

public class Fu {
    public Fu() {
        
    }
}
public class Zi extends Fu {
    public Zi() {
        this("hhh");//调用自己的构造方法,间接调用父类构造方法
    }
    public Zi(String s){
        super();
    }
}

super用法:

public class Person {
    private String name;
    private int age;
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    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;
    }
}
public class Student extends Person {

    public Student(String name, int age) {
        super(name, age);
    }
    
}
public class Teacher extends Person {

    public Teacher(String name, int age) {
        super(name, age);
    }

}
public class Test1 {
    public static void main(String[] args) {
        Student s=new Student("学生", 18);
        Teacher t=new Teacher("老师", 28);
        System.out.println(s.getName());
        System.out.println(t.getAge());
    }
}

猜你喜欢

转载自www.cnblogs.com/Zs-book1/p/10552544.html
今日推荐