继承super-this

继承

继承的本质时对某一批类的抽象

extends意思为扩展,子类是父类的扩展

java中类只有单继承,没有多继承。子类只有一个父类,一个父类可以有多个子类

子类继承了父类,就会拥有父类的所有方法

package OOP02.Demon2;

public class Person {
    public void say(){
        System.out.println("喵了一声");
    }
    private int money = 100;//父类私有
}
package OOP02.Demon2;
      //学生继承了Person
public class Student extends Person{
    //学生方法为空
}
package OOP02.Demon2;

public class Aplication {
    public static void main(String[] args) {
        Student student = new Student();
        student.say(); //喵了一声
        
      // System.out.println(student.money);这句话则会报错,因为money为父类私有,没有继承给字类
    }
}

Application中可以直接调用student.say(),Student继承了Person的方法。

父类私有的属性子类无法继承。

ctrl+h可以查看继承的关系。

在java中所有的类都默认直接或间接继承了object类。

super

  1. super调用父类的构造方法,必须在构造方法的第一个
  2. super必须只能出现在子类的方法、构造方法中(不可能调到object去对吧)
  3. super和this不能同时调用构造方法,因为二者都要求写在构造器的第一行。

通过下面代码实践更好地理解:(Student是Person的子类,因为学生属于人嘛)

从程序理解super

父类↓Person

package OOP02.Demon2;

public class Person {
protected String name = "阳";

    public Person() {
        System.out.println("父构造运行");
    }
    //若此处使用有参构造器则无参构造器消失,
    //子类的无参构造器由于需要调用父类无参构造器,
    //会导致子类无参构造器报错!!
    /*
    若此处只是用有参构造器器
    为了子类无参构造器能够运行
    需要在super()中调用父类有参构造器!!
    如果super()不写默认调用无参!!
     */

    //########################################
public void print(){
    System.out.println("Person");

}
}

子类↓Student

package OOP02.Demon2;
      //学生继承了Person
public class Student extends Person{

            public Student() {
         //这里有一句隐藏代码,super(),调用了父类的1
                  super();
         //调用父类的构造器必须在子类构造器的第一行
                  System.out.println("子构造运行");
            }


            public String name = "林";
public void name(String name){
      System.out.println(name);// 形式参数name
      System.out.println(this.name);//学生类定义的name
      System.out.println(super.name);//父类定义的name


}//##################################################
            public void print(){
                  System.out.println("Student");}
           public void text(){
          print();  //学生类里的
          this.print();//学生类里的
          super.print();//人 类里的
          //注意若父类方法为私有的super也无法调用
           }
}

调试↓Application

package OOP02.Demon2;

public class Aplication {
    public static void main(String[] args) {
        Student student = new Student();
        student.name("fa");
        /*
        结果为fa
             林
             阳
         */
//#######################################################
        student.text();
        /*结果为
        Student
        Student
        Person

         */
    }
}

super与this的对比

(指)代表的(具体)对象不同:

this:本身调用者的对象

super:代表父辈对象的应用

前提不同:

this:没有继承也可以使用,因为只涉及类本身

super:只能继承条件下使用,你得有个爹才能调用爹

构造方法不同:

this():本类的构造?????有什么用?????????

super():父类的构造

posted @ 2020-11-06 17:25  SshadowHeart  阅读(98)  评论(0)    收藏  举报