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

相关推荐
二炮手亮子4 小时前
浅记java线程池
java·开发语言
一路向北North4 小时前
Spring Security OAuth2.0(23):分布式系统授权-转发明文给微服务
java·spring·微服务
zmzb01034 小时前
C++课后习题训练记录Day157
开发语言·c++
dunge20264 小时前
2026年7月最新ChatGPT Plus / Pro 与 Codex:当 AI Agent 最新5.6版本来袭,必须理解事务、幂等与补偿
开发语言·人工智能·python
爱吃牛肉的大老虎6 小时前
rust基础之环境搭建
java·开发语言·rust
openKylin6 小时前
与全球技术演进同频,openKylin 3.0从C迈向Rust
c语言·开发语言·rust·开源·开放原子·openkylin
tellmewhoisi7 小时前
多版本共用redis的token有效期校验(过期重新登录)
java·redis·缓存
疯狂打码的少年7 小时前
【软件工程】结构化设计:模块独立性与耦合内聚
java·开发语言·笔记·软件工程
乐观的Terry7 小时前
3、数据库设计与领域实体
java·数据库·spring boot·spring cloud·ai编程
程高兴7 小时前
PMSM基于在线转动惯量辩识的滑模负载转矩观测器MATLAB-SIMULINK仿真模型
开发语言·matlab