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

相关推荐
z落落6 分钟前
C#WinForm控件实战:Panel与单选框动态创建
开发语言·c#
ptc学习者6 分钟前
python 中描述符@property property 大概的样子
开发语言·python
zmzb01038 分钟前
Python课后习题训练记录Day129
开发语言·python
终将老去的穷苦程序员13 分钟前
基于SpringBoot的餐饮管理系统
java·spring boot·后端
心之伊始14 分钟前
Spring AI Tool Calling 实战:让 Java Agent 调用本地 Bean 工具方法
java·spring boot·agent·spring ai·tool calling
张忠琳16 分钟前
【Go 1.26.4】Golang Map 深度解析
开发语言·后端·golang
Vertira17 分钟前
如何对QT开发的软件进行打包[已解决]
开发语言·qt
AI人工智能+电脑小能手19 分钟前
【大白话说Java面试题 第110题】【并发篇】第10题:CAS 存在哪些问题?
java·开发语言·面试
石一峰69927 分钟前
C 语言函数设计模式实战经验
c语言·开发语言·设计模式
sitellla33 分钟前
Pydub:用 Python 处理音频,不写废话
开发语言·python·其他·音视频