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

相关推荐
冬夜戏雪12 分钟前
实习面经记录(十)
java·前端·javascript
skiy20 分钟前
java与mysql连接 使用mysql-connector-java连接msql
java·开发语言·mysql
一念春风21 分钟前
智能文字识别工具(AI)
开发语言·c#·wpf
平生不喜凡桃李32 分钟前
浅谈 Linux 中 namespace 相关系统调用
java·linux·服务器
zb2006412038 分钟前
CVE-2024-38819:Spring 框架路径遍历 PoC 漏洞复现
java·后端·spring
2401_895521341 小时前
spring-ai 下载不了依赖spring-ai-openai-spring-boot-starter
java·人工智能·spring
桦01 小时前
【C++复习】:继承
开发语言·c++
何仙鸟1 小时前
GarmageSet下载和处理
java·开发语言
wefly20171 小时前
免安装!m3u8live.cn在线 M3U8 播放器,小白也能快速上手
java·开发语言·python·json·php·m3u8·m3u8在线转换
yuweiade1 小时前
springboot和springframework版本依赖关系
java·spring boot·后端