一、super关键字

我们先看一个例子


package com.bjpowernode.java_learning;

​

public class D51_ {

  public static void main(String[] args) {

    Manager51 m1 = new Manager51();

    m1.m1();

  }

}

​

class Employee51{

  //成员函数

  public void work() {

    System.out.print("员工在工作");

  }

}

class Manager51 extends Employee51{

  public void work() {

    System.out.print("经理在工作");

  }

  public void m1() {

    this.work();

  }

}

我们从上面的代码可以看出来,这个Manager51类继承了Employee51这个类,并且还重写了一个函数work,从显示的结果也可以看的出来,返回了被改写后的内容,现在我们有个需求就是让Manager51这个类也返回“员工在工作”

我们改写子类Manager51


class Manager51 extends Employee51{

  public void work() {

    System.out.print("经理在工作");

  }

  public void m1() {

    super.work();

  }

}

把this改成了super,就达到了调用父类的目的

二、注意点

1.super不是引用类型,super中存储的不是内存地址,super指向的不是父类对象(这一点一定要和this关键做对比)

2.super代表的是当前子类对象中的父类型特征。

3.什么时候使用super这个关键字

例如:子类和父类中都有某个数据,如果要在子类中访问父类的某一个属性或者方法,那么我们就需要使用super.

4.super可以用在什么地方

(1)super可以用在成员方法中

(2)super可以用在构造方法中

(3)super是不可以用在静态方法中。(和this相同都不能用在静态上下文中)

5.super关键字用在构造方法中语法

super(实参)

(1)作用:通过子类的构造方法去掉用父类的构造方法,其真正的作用就是给当前的子类对象中的父类型特征赋值。

(2)语法规则:一个构造方法第一行如果没有this(...);也米有显式的去调用(2)super(...);系统会默认调用super();

(4)super(...);的调用只能放在构造函数的第一行

(5)super(...)和this(...)不能共存

(6)super(...);调用了父类中的构造方法,但是不会创建父类对象。

(7)在java语言中只要是创建了java对象,那么Object中的无参数构造方法一定会执行。​

(8)构造方法执行不一定会创建对象。​


package com.bjpowernode.java_learning;

​

public class D51_2_ {

  public static void main(String[] args) {

    DebitAccount51 d1 = new DebitAccount51();

  }

}

class Account51{

  //

  private String actno;

  private double balance;

  public String getActno() {

    return actno;

  }

  public void setActno(String actno) {

    this.actno = actno;

  }

  public double getBalance() {

    return balance;

  }

  public void setBalance(double balance) {

    this.balance = balance;

  }

  public Account51() {

    System.out.println("我是Account51的构造方法");

  }

  public Account51(String actno,double balance) {

    this.actno = actno;

    this.balance = balance;

  }

}

class DebitAccount51 extends Account51{

  private double debit;

​

  public double getDebit() {

    return debit;

  }

​

  public void setDebit(double debit) {

    this.debit = debit;

  }

  public DebitAccount51() {

    super();//这里写不写这个super()都行,不写默认写。会调用父类的构造函数

  }

  public DebitAccount51(String actno,double balance,double debit) {

    super(actno,balance);//因为这两个参数在父类中是私有的成员变量,所以在子类中不能直接赋值,

    //所以采用super(参数)的方式进行调用

    this.debit = debit;

  }

}

五、源码:

D51_SuperKeywordAnalysis.java

D51_2_SuperInConstructionMethod.java

地址:

https://github.com/ruigege66/Java/blob/master/D51_SuperKeywordAnalysis.java

https://github.com/ruigege66/Java/blob/master/D51_2_SuperInConstructionMethod.java

2.CSDN:https://blog.csdn.net/weixin_44630050(心悦君兮君不知-睿)

3.博客园:https://www.cnblogs.com/ruigege0000/

4.欢迎关注微信公众号:傅里叶变换,个人公众号,仅用于学习交流,后台回复”礼包“,获取大数据学习资料

Java连载51-super关键字的更多相关文章

  1. [Java学习]面向对象-super关键字;final关键字

    super关键字 super代表的是当前子类对象中的父类型特征,可以看做是this的一部分.与this不同,不是引用,不存储对象内存地址. super可以用在什么位置 1 可以用在成员方法中.不能用在 ...

  2. java基础之super关键字

    一.在java里面,对于super关键字通常有两种用法: 1. 用在子类的构造方法里(初始化用),主要是调用父类的默认构造方法,如果父类有不止一个构造方法,可以通过super指定具体的构造函数,比如 ...

  3. Java继承:super关键字、构造器、final用法

    一.继承 继承好处 1.提高代码的重用性 2.提高代码的扩展性和维护性 3.为多态打下了基础 继承类型 继承子类创建对象的过程 二.super关键字的使用 理解:super代表父类的引用,用于访问父类 ...

  4. Java中的super关键字和this关键字作用介绍

    一.super关键字的作用 1.子类在构造方法中显示调用父类构造方法 super可以在子类的构造方法中显示调用父类的构造方法:并且这行代码必须出现在子类构造方法的第一行.原因:因为父类构造方法没有执行 ...

  5. Java基础(51):Super与this的区别

    1.     子类的构造函数如果要引用super的话,必须把super放在函数的首位. class Base { Base() { System.out.println("Base" ...

  6. java学习之super关键字

    对于具有public或者protected属性的父类,其子类若想继承父亲的属性或者方法,那么需要用到super 实例:

  7. Java中的super关键字何时使用

    子类的构造函数中不是必须使用super,在构造函数中,如果第一行没有写super(),编译器会自动插入.但是如果父类没有不带参数的构造函数,或这个函数被私有化了(用private修饰).此时你必须加入 ...

  8. Java中关于super关键字的作用

    在子类继承父类中,一般有一行super的语句,需要记住三种使用方法: 1.super.变量/对象名: 使用这种方法可以直接访问父类中的变量或对象,进行修改赋值等操作 2.super.方法名(): 直接 ...

  9. Java基础之this和super关键字用法

    this 在java中,this是一个引用当前类对象的引用变量,主要有以下几种用法: 引用当前类的实例变量· this关键字可以用来引用当前类的实例变量.如果实例变量和某个方法的参数之间存在歧义(实例 ...

  10. Java中super关键字的作用与用法

    Java中的super是什么?java中的super关键字是一个引用变量,用于引用父类对象.关键字“super”以继承的概念出现在类中.主要用于以下情况: 1.使用super与变量:当派生类和基类具有 ...

随机推荐

  1. redhat 6.5 更换yum源

    新安装了redhat6.5.安装后,登录系统,使用yum update 更新系统.提示: Loaded plugins: product-id, security, subscription-mana ...

  2. mysql在本地已经启动,但是在网页上不能直接访问的解决

    1.将mysql文件下的my.ini中的路径代码 # 设置mysql的安装目录 basedir=E:/Develop/mysql # 设置mysql数据库的数据的存放目录 datadir=E:/Dev ...

  3. redis 开源客户端下载

    redis 开源客户端下载地址: https://github.com/qishibo/AnotherRedisDesktopManager/releases

  4. 查看/运行jpynb文件

    Windows OS:安装好pip包,能使用pip进行安装第三方包. cmd命令行: pip install jupyter jupyter notebook cd (xx.jpynb文件所在文件夹) ...

  5. 2.华为路由交换技术_TCP/IP参考模型

    1.应用层 2.传输层(主机到主机层) 3.网络层(IPV4) ARP协议:地址解析协议 原理:源终端A想要发送信息给目的终端B,已知B的IP地址,需要获取B的MAC地址.首先它会在局域网广播,一般情 ...

  6. 25.md5 collision(NUPT_CTF)

    抓住两点提示: 1.md5碰撞 2.please input a 利用0 == 字符串是成立的,从而可以绕过MD5检查. 所以找一个md5是0e开头的值,因为 php 在处理 == 的时候当碰到的字符 ...

  7. 推荐系统| ② 离线推荐&基于隐语义模型的协同过滤推荐

    一.离线推荐服务 离线推荐服务是综合用户所有的历史数据,利用设定的离线统计算法和离线推荐算法周期性的进行结果统计与保存,计算的结果在一定时间周期内是固定不变的,变更的频率取决于算法调度的频率. 离线推 ...

  8. 【安富莱】RTX嵌入式操作系统教程发布,支持F103,F407和F429,含81个配套例程(2017-10-17)

    前言说明:1. 首先感谢大家对我们安富莱电子一年来的支持,2016年我们会再接再厉推出更好的教程. 2. 估计也有网友会问RTX的优势在那里,针对这个问题,教程中第一章分为6条专门回答了这个问题,有兴 ...

  9. Linux 部署 java1.8

    1.安装 查看java安装包 yum list | grep java 使用yum安装 yum install java-1.8.0-openjdk.x86_64 修改环境变量 vi /etc/pro ...

  10. 一、I/O模型之BIO

    I/O模型之BIO 基本介绍 Java BIO 就是传统的 Java IO 编程,其相关的类和接口再 java.io 包下 BIO(blocking I/O):同步阻塞,服务器实现模式为一个连接一个线 ...