Java----super 关键字

super关键字

  • 基本介绍:

    复制代码
    super代表父类的引用,用于访问父类的属性、方法、构造器
  • 基本语法:

    复制代码
    1、访问父类的属性,但不能访问父类的private属性  如:super.属性名; ​
    2、访问父类的方法,不能访问父类的private方法  如:super.方法名(参数列表); 
    3、访问父类的构造器(这点前面用过:)  super(参数列表);只能放在构造器的第一句,只能出现一句!
  • 代码示例:

    • Base类:

      java 复制代码
      package com.jyy.improve_;
      ​
      public class Base {
          public int n1 = 100;
          protected int n2 = 200;
          int n3 = 300;
          private int n4 = 400;
      ​
      //    public Base(){
      //        System.out.println("父类Base() 构造方法被调用。。。。。。。");
      //    }
      ​
          public Base(String name , int age)
          {
              System.out.println("父类 Base(String name , int age) 构造方法被调用。。。。。。");
          }
      ​
          public int getN4() {
              return n4;
          }
      ​
          public void test1()
          {
              System.out.println("text01().............");
          }
      ​
          protected void test2()
          {
              System.out.println("text02().......");
          }
      ​
          void test3()
          {
              System.out.println("text03()........");
          }
      ​
          private void test4()
          {
              System.out.println("text04()........");
          }
      ​
          public void testing()
          {
              test4();
          }
      }
      复制代码
    • Sub子类:

      java 复制代码
      public class Sub extends Base {
      ​
          public Sub() {
              super("smith",30);
              System.out.println("子类Sub()构造方法被调用。。。。。。");
          }
      ​
          public void sayOk()
          {
              System.out.println(super.n1 + " " + super.n2 + " " + super.n3 + " " + getN4());
              super.test2();
              super.test3();
              super.test1();
              super.testing();
          }
      }
      ​
    • 主函数:

      java 复制代码
      public class ExtendsDetail {
          public static void main(String[] args) {
              Sub sub = new Sub();
              sub.sayOk();
          }
      }
      ​

super关键字的细节

  1. 调用父类的构造器的好处(分工明确,父类属性由父类初始化,子类的属性由子类初始化)

  2. 当子类中有和父类中的成员(属性和方法)重名时,为了访问父类的成员,必须通过super。如果没有重名,使用super,this,直接访问是一样的效果!

    java 复制代码
    public void cal()
        {
            System.out.println("调用子类的cal()方法。。。。。。。。。。。。。。。。");
        }
    ​
        public void sum()
        {
            cal();
            this.cal(); // 等价于cal
            super.cal(); //直接调用父类的cal()  ===>这是与this的区别
        }
    ​
    ​
    输出:
    调用子类的cal()方法。。。。。。。。。。。。。。。。
    调用子类的cal()方法。。。。。。。。。。。。。。。。
    调用父类的cal()方法。。。。。。。。。。。。。。。
    复制代码
  3. super的访问不限于直接父类,如果爷爷类和本类中有同名的成员,也可以使用super去访问爷爷类的成员;如果多个基类(上级类)中都有同名的成员,使用super访问遵循就近原则。 A - > B - > C

相关推荐
3GPP仿真实验室10 分钟前
【Matlab源码】6G候选波形:OFDM-IM 增强仿真平台 DM、CI
开发语言·matlab·ci/cd
devmoon14 分钟前
在 Polkadot 上部署独立区块链Paseo 测试网实战部署指南
开发语言·安全·区块链·polkadot·erc-20·测试网·独立链
lili-felicity14 分钟前
CANN流水线并行推理与资源调度优化
开发语言·人工智能
爬山算法15 分钟前
Hibernate(87)如何在安全测试中使用Hibernate?
java·后端·hibernate
沐知全栈开发15 分钟前
CSS3 边框:全面解析与实战技巧
开发语言
island131424 分钟前
CANN GE(图引擎)深度解析:计算图优化管线、内存静态规划与异构 Stream 调度机制
c语言·开发语言·神经网络
云姜.27 分钟前
线程和进程的关系
java·linux·jvm
是码龙不是码农28 分钟前
支付防重复下单|5 种幂等性设计方案(从初级到架构级)
java·架构·幂等性
曹牧29 分钟前
Spring Boot:如何在Java Controller中处理POST请求?
java·开发语言
heartbeat..29 分钟前
JVM 性能调优流程实战:从开发规范到生产应急排查
java·运维·jvm·性能优化·设计规范