资讯专栏INFORMATION COLUMN

java基础语法—super关键字

VincentFF / 2553人阅读

摘要:介绍关键字代表父类的引用,用于访问父类的属性方法和构造器。基本语法父类代码访问父类的属性,但不能访问父类的属性属性访问父类的方法,但不能访问父类的方法方法名参数列表访问父类的构造器参数列表只能放在构造器的第一句,且只能出现一句。

介绍

super关键字代表父类的引用,用于访问父类的属性、方法和构造器。

基本语法

父类代码:

public class A {    private int n1 = 1;    protected int n2 = 2;    int n3 = 3;    public int n4 = 4;    private void test100(){    }    protected void test200(){    }    void test300()    {    }    public void test400(){    }}
  1. 访问父类的属性,但不能访问父类的private属性:super.属性

  2. 访问父类的方法,但不能访问父类的private方法:super.方法名(参数列表)

  3. 访问父类的构造器:super(参数列表)

    只能放在构造器的第一句,且只能出现一句。

super的细节和好处

1、分工明确

​ 父类属性由父类初始化,子类属性由子类初始化。

​ 父类:

​ 子类:

​ 可以看出在子类中初始化了子类属性n2.

2、当子类中有和父类中的成员重名时,为了访问父类的成员,必须通过super。

​ 父类:

​ 子类:

public class B extends A {    public void cal(){        System.out.println("B中的cal方法...");    }    public void sum(){        System.out.println("B类的sum方法....");        //希望调用父类的cal方法        cal();//找cal方法时,顺序是,先找本类,如果有并且可以调用,则调用,如果没有,则找父类              //父类没有的话,继续找父类的父类,直到object类。              //查找过程中,找到了但不能访问,则报错              //查找过程中,没有找到,则提示方法不存在        this.cal(); //和直接访问方法的顺序一样        super.cal(); //没有查找本类的过程,直接到父类中查找    }}

结果:

B类的sum方法....B中的cal方法...B中的cal方法...A类的cal方法....

父类和子类中都有cal方法,从结果中可以看到通过super可以查找到父类的cal方法,但是其他两种方法则是找到了本类中的cal方法。

3、如果没有重名,使用super、this、直接访问是一样的效果。

​ 子类:

public class B extends A {    public void sum(){        System.out.println("B类的sum方法....");        //希望调用父类的cal方法        cal();//找cal方法时,顺序是,先找本类,如果有并且可以调用,则调用,如果没有,则找父类              //父类没有的话,继续找父类的父类,直到object类。              //查找过程中,找到了但不能访问,则报错              //查找过程中,没有找到,则提示方法不存在        this.cal(); //和直接访问方法的顺序一样        super.cal(); //没有查找本类的过程,直接到父类中查找    }}

​ 4、super的访问不限于直接父类,如果爷爷类和本类中有同名的成员,可以使用super去访问爷爷类的成员。

​ 若多个基类中都有同名的成员,使用super遵循就近原则,来不停的往上找。

public class Base {    public int n2 = 999;}public class A extends Base {    public int n2 = 2;}public class B extends A {    public void test(){        System.out.println(super.n2);    }}

结果如下:

2

也就是super的就近原则。

super和this的区别

区别点thissuper
访问属性访问本类的属性,若本类中没有此属性,则到父类中查找直接从父类中开始查找
调用方法访问本类的方法,若本类中没有此属性,则到父类中查找直接从父类中开始访问
调用构造器调用本类构造器必须放在构造器首行调用父类构造器必须放在子类构造器的首行
特殊性表示当前对象子类访问父类对象

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/119650.html

相关文章

  • ES6—class与面向对象编程(8)

    摘要:接下来我们看下类的写法,这个就很接近于传统面向对象语言了。如果你想了解传统面向对象语言,这里是一个好切入点。作为对象时,指向父类的原型对象。这些就是为将来在中支持面向对象的类机制而预留的。 在ES5中,我们经常使用方法或者对象去模拟类的使用,并基于原型实现继承,虽然可以实现功能,但是代码并不优雅,很多人还是倾向于用 class 来组织代码,很多类库、框架创造了自己的 API 来实现 c...

    wangjuntytl 评论0 收藏0
  • 夯实基础系列一:Java 基础总结

    摘要:可实现单例模式代码块初始化静态变量,只被执行一次内部类不能与外部类重名,只能访问外部类静态数据包括私有多分支选择整型或字符类型变量或整数表达式开始支持。 前言 大学期间接触 Java 的时间也不短了,不论学习还是实习,都让我发觉基础的重要性。互联网发展太快了,各种框架各种技术更新迭代的速度非常快,可能你刚好掌握了一门技术的应用,它却已经走在淘汰的边缘了。 而学习新技术总要付出一定的时间...

    greatwhole 评论0 收藏0
  • Java基础(了解继承)

    摘要:上学学的完全没印象,基础烂的不行,最近项目主要是改,有时间就看了一下这本书补一下基础在写项目时,老用到继承,但是对其了解不深,会用但是不理解概念继承是面向对象编程技术的一块基石,因为它允许创建分等级层次的类。 上学学的完全没印象,Java基础烂的不行,最近项目主要是改bug,有时间就看了一下Head First Java这本书补一下基础 在写项目时,老用到Java继承,但是对其了解不深...

    MageekChiu 评论0 收藏0
  • java学习(二) —— java基础语法

    摘要:前言的基础语法与有很多相似之处,但是也有一些特定的关键词是独有的。以开头八进制由,,组成。整数默认是十进制十六进制由,,,,,,,,组成。初始化值必须初始化值,否则不能使用变量。 前言 java的基础语法与php有很多相似之处,但是也有一些特定的关键词是java独有的。 java的基础语法大体就包括:关键字,标识符,注释,常量,进制和进制转换,变量,数据类型和类型转换,运算符,语句 ...

    caiyongji 评论0 收藏0
  • 词法 - Javascript核心 - Javascript语法基础

    摘要:原文源码的词法结构字符集程序是用字符集。支持地球上几乎所有在用的语言。是区分大小写的语言的。与在是不同的,在是相同的。会忽略程序中标识之前的空格。多数情况下也会忽略换行符。 原文: http://pij.robinqu.me/JavaScript_Core/JavaScript_Basics/Lexical.html 源码: https://github.com/Rob...

    lakeside 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<