Java基础学习总结——super关键字

Java基础学习总结——super关键字

一、什么是super?

它是一个指代变量,是直接父类工具的引用,用于在子类中指代父类工具。

二、应用

2.1 应用局限

只能用于子类的组织函数和实例方式中,不能用于子类的类(静态)方式中。
缘故原由:super指代的是一个父类的工具,是需要在运行时被建立的,而静态方式是类方式,它是类的一部分。在类被载入时,方式已经存在,然则父类工具还没被建立。

2.2 若何使用

2.2.1 通过super关键字在子类中挪用父类的成员变量或方式

可用下列方式挪用:
super.<成员变量名>
super.<成员方式名>
/**
 * 测试super用法一
 * @author Java_biao
 *
 */
public class TestSuper01 {
    public static void main(String[] args) {
        ChildClass01 child = new ChildClass01();
        child.printValue();
        child.showInfo();
    }
}

class FatherClass01 {
    int value = 100;
    
    public void info() {
        System.out.println("this is FatherClass...");
    }
}

class ChildClass01 extends FatherClass01 {
    
    /*  子类除了继续父类所具有的valu属性外,自己又另外声明晰一个value属性,
     *  也就是说,此时的子类拥有两个value属性。 */
    int value = 200;    
    
    @Override
    public void info() {
        System.out.println("this is ChildClass...");
    }
    
    public void printValue() {
        /*挪用父类value值*/
        System.out.println("The value of FatherClass: "+super.value); 
        /*挪用子类value值*/
        System.out.println("The value of ChildClass: "+this.value);    
    }
    
    public void showInfo() {
        super.info();   //挪用父类中被重写的方式
        this.info();    //挪用子类方式
    }
    
}
测试效果:

2.2.2 通过super关键字挪用父类中界说的组织方式

可用下列方式挪用:
super()  //挪用无参组织器
super(参数1[, 参数2, ...参数n])  //挪用有参组织器

其中挪用参数列表必须和父类的某个组织函数方式的参数列表完全匹配。

子类与其直接父类之间的组织方式存在约束关系,有以下几条主要原则:

(1)按继续关系,组织方式是从顶向下举行挪用的。

(2)若是子类没有组织方式,则它默认挪用父类无参的组织方式,若是父类中没有无参数的组织方式,则将发生错误。

(3)若是子类有组织方式,那么建立子类的工具时,先执行父类的组织方式,再执行子类的组织方式。

python第一次作业

(4)若是子类有组织方式,但子类的组织方式中没有super关键字,则系统默认执行该组织方式时会发生super()代码,即该组织方式会挪用父类无参数的组织方式。

(5)对于父类中包罗有参数的组织方式,子类可以通过在自己的组织方式中使用super关键字来引用,而且必须是子类组织函数方式中的第一条语句。

(6)Java语言中规定当一个类中含有一个或多个有参组织方式,系统不提供默认的组织方式(即不含参数的组织方式),以是当父类中界说了多个有参数组织方式时,应思量写一个无参数的组织方式,以防子类省略super关键字时泛起错误。

(7) 子类的静态方式中不能使用super关键字。

/**
 * 测试super用法二
 * @author Java_biao
 *
 */
public class TestSuper02 {
    public static void main(String[] args) {
        /**
         * 当实例化工具时,会先挪用父类的组织器,在挪用子类组织器
         */
        ChildClass02 child = new ChildClass02();
    }
}

class FatherClass02 {
    int value;
    
    public FatherClass02() {
        System.out.println("这是父类无参组织器");
    }
}

class ChildClass02 extends FatherClass02 {
    int id;
    
    public ChildClass02() {
        /*此处实际上系统默认执行super()*/
        System.out.println("这是子类无参组织器");
    }
}
测试效果:

/**
 * 测试super用法二
 * @author Java_biao
 *
 */

class FatherClass03 {
    int id;
    String name;
    int value;
    
    public FatherClass03() {
        System.out.println("这是父类无参组织器");
    }
    
    public FatherClass03(String name) {
        this.name = name;
        System.out.println("这是父类有参组织器1");
    }
    
    public FatherClass03(String name, int value) {
        this.name = name;
        this.value = value;
        System.out.println("这是父类有参组织器2");
    }
    
}

class ChildClass03 extends FatherClass03 {
    
    public ChildClass03() {
        System.out.println("这是子类无参组织器");
    }
    
    public ChildClass03(String name) {
        super(name);
        System.out.println("这是子类有参组织器1");
    }
    
    public ChildClass03(String name, int value) {
        super(name, value);
        System.out.println("这是子类有参组织器2");
    }
}

public class TestSuper03 {
    public static void main(String[] args) {
        /* 先挪用父类有参组织器1,再挪用子类有参组织器1*/
        ChildClass03 child1 = new ChildClass03("Java_biao");
        
        /* 先挪用父类有参组织器2,再挪用子类有参组织器2*/
        ChildClass03 child2 = new ChildClass03("Java_biao", 200);
    }
}
测试效果:

三、总结

1、通过super关键字在子类中挪用父类的成员变量或方式
2、通过super关键字挪用父类中界说的组织方式

参考博客:https://blog.csdn.net/zai_xia/article/details/79946984

原创文章,作者:dddof新闻网,如若转载,请注明出处:https://www.dddof.com/archives/1178.html