zoukankan      html  css  js  c++  java
  • java关键字之super关键字

    1 super含义

    1. super是直接父类对象的引用。可以通过super来访问父类中被子类覆盖的方法或属性。(位置没有限制)
    2. 所有构造方法的第一行代码没有显式的调用super(...)或者this(...);那么Java默认都会调用super(),含义是调用父类的无参数构造方法。这里的super()可以省略。

    每个方法里面都有两个隐式参数:this和supe.This关键字指向本类super关键字指向直接父类

    super测试代码

    package renjinbao_super;
    
    public class Test {
        public static void main(String[] args) {
            new ChildClass().f();
        }
    }
    
    class GrandFatherClass {
        public int value;
    
        public void f() {
            value = 50;
            System.out.println("GrandFatherClass.value=" + value);
        }
    }
    
    class FatherClass {
        public int value;
    
        public void f() {
            value = 100;
            System.out.println("FatherClass.value=" + value);
        }
    }
    
    class ChildClass extends FatherClass {
        public int value;
    
        public void f() {
            super.f();
            value = 200;
            System.out.println("ChildClass.value=" + value);
            System.out.println(value);
            System.out.println(super.value);
        }
    }
    运行结果:
    FatherClass.value=100
    ChildClass.value=200
    200
    100

    2 继承树追溯

    注:静态初始化块调用顺序,与构造方法调用顺序一样,不再重复。

      构造方法向上追溯执行测试

    package TestThis;
    
    public class TestSuper { 
        public static void main(String[] args) {
            System.out.println("开始创建一个ChildClass对象......");
            new ChildClass();
        }
    }
    class FatherClass {
        public FatherClass() {
            System.out.println("创建FatherClass");
        }
    }
    class ChildClass extends FatherClass {
        public ChildClass() {
            System.out.println("创建ChildClass");
        }
    }
    运行结果:
    开始创建一个ChildClass对象......
    创建FatherClass
    创建ChildClass

    3 内存分析图

     

    结论

      静态初始化块和类都先初始父类(因为构造器第一句都是super());属性、方法的查询是先从子类开始

  • 相关阅读:
    python 爬取网络小说 清洗 并下载至txt文件
    2020.11.25收获
    2020.11.24收获
    2020.11.23收获
    2020.11.22收获
    2020.11.21收获
    Java学习11.21(使用 Servlet 完成控制)
    Java学习11.20
    Java学习11.19(学习servlet第三天)
    Java学习11.17(人口普查前端页面)
  • 原文地址:https://www.cnblogs.com/lanmao123/p/10489652.html
Copyright © 2011-2022 走看看