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

相关推荐
你怎么知道我是队长21 分钟前
C语言---输入和输出
c语言·开发语言
mmz120724 分钟前
二分查找(c++)
开发语言·c++·算法
你怎么知道我是队长31 分钟前
C语言---文件读写
java·c语言·开发语言
陌路2032 分钟前
C++30 STL容器 -deque双端队列
开发语言·c++
xb11321 小时前
C#委托详解
开发语言·c#
brent4231 小时前
DAY50复习日
开发语言·python
木头程序员1 小时前
前端(包含HTML/JavaScript/DOM/BOM/jQuery)基础-暴力复习篇
开发语言·前端·javascript·ecmascript·es6·jquery·html5
Data_agent1 小时前
Cocbuy 模式淘宝 / 1688 代购系统(欧美市场)搭建指南
开发语言·python
wszy18091 小时前
外部链接跳转:从 App 打开浏览器的正确姿势
java·javascript·react native·react.js·harmonyos
lsx2024061 小时前
《Foundation 下拉菜单》
开发语言