文档章节

Java中super关键字的三种用法

天蚕宝衣
 天蚕宝衣
发布于 2016/01/27 17:49
字数 948
阅读 13
收藏 1
点赞 1
评论 0

1、子类的构造函数如果要引用super的话,必须把super放在函数的首位。

class Base {
    Base() {   
        System.out.println("Base"); 
    } 
} 
public class Checket extends Base {  
    Checket() {   
        super();//调用父类的构造方法,一定要放在方法的首个语句。 
        System.out.println("Checket");  
    } 
    public static void main(String[] args[]) {   
        Checket c = new Checket(); 
    }
}

如果想用super继承父类构造的方法,但是没有放在第一行的话,那么在super之前的语句,肯定是为了满足自己想要完成某些行为的语句,但是又用了super继承父类的构造方法。那么以前所做的修改就都回到以前了,就是说又成了父类的构造方法了。
2、在Java中,有时还会遇到子类中的成员变量或成员方法与父类(有时也称父类)中的成员变量或成员方法同名。因为子类中的成员变量或成员方法名优先级高,所以子类中的同名成员变量或成员方法就隐藏了父类的成员变量或成员方法,但是我们如果想要使用父类中的这个成员变量成员方法,就需要用到super。

class Country {  
    String name;  
    void value() {
        name = "China"; 
    }
} 
class City extends Country {  
    String name;  
    void value() {  
        name = "Hefei"; 
        super.value();//不调用此方法时,super.name返回的是父类的成员变量的值null  
        System.out.println(name); 
        System.out.println(super.name); 
    }
    public static void main(String[] args) {
        City c=new City();
        c.value();
    }
}

为了在子类中引用父类中的成员变量name和成员方法value(),在代码中使用了super、super.name和super.value(),若不调用super.value()时,super.name返回父类成员变量默认值null,调用此方法时,super.value()方法把成员变量name赋值为China,再利用super.name调用父类的成员变量的值。另外,要注意的是super.name调用的是成员变量的值,

class Country {  
    String name="xianfan";  
    String value(String name) {   
        name = "China";   
        return name; 
     } 
} 
class City extends Country {  
    String name; 
    String value(String name) {  
        name = "Hefei"; super.value("失败");//不调用此方法时,super.name返回的是父类的成员变量的值null   
        System.out.println(name);   
        System.out.println(super.name);   
        return name; 
    } 
    public static void main(String[] args) {   
        City c=new City();   
        c.value("成功"); 
    } 
}

结果为:Hefei

              xianfan
此时,super.name返回的值是父类成员变量的值xianfan,而此时的super.value()方法是不起作用的。

3、用super直接传递参数:

class Person {  
    public static void prt(String s) {   
        System.out.println(s); 
    } 
    Person() {   
        prt("A Person.");  
    } 
    Person(String name) {   
        prt("A person name is:" + name);  
    } 
} 
public class Chinese extends Person {  
    Chinese() {   
        super(); // 调用父类无形参构造方法(1) 
        prt("A chinese.");// (4) 
    } 
    Chinese(String name) { 
        super(name);// 调用父类具有相同形参的构造方法(2) 
        prt("his name is:" + name); 
    } 
    Chinese(String name, int age) {   
        this(name);// 调用当前具有相同形参的构造方法(3) 
        prt("his age is:" + age); 
    } 
    public static void main(String[] args) {   
        Chinese cn = new Chinese();   
        cn = new Chinese("kevin");  
        cn = new Chinese("kevin", 22);
    }
}

结果为:A Person.
             A chinese.
             A person name is:kevin

             his name is:kevin

             A person name is:kevin

             his name is:kevin

             his age is:22

在这段程序中,this和super不再是像以前那样用“.”连接一个方法或成员,而是直接在其后跟上适当的参数,因此它的意义也就有了变化。super后加参数的是用来调用父类中具有相同形式的构造函数,如1和2处。this后加参数则调用的是当前具有相同参数的构造函数,如3处。当然,在Chinese的各个重载构造函数中,this和super在一般方法中的各种用法也仍可使用,比如4处,你可以将它替换为“this.prt”(因为它继承了父类中的那个方法)或者是“super.prt”(因为它是父类中的方法且可被子类访问),它照样可以正确运行。但这样似乎就有点画蛇添足的味道了。

© 著作权归作者所有

共有 人打赏支持
天蚕宝衣
粉丝 18
博文 237
码字总数 178069
作品 0
天津
JavaScript 中的继承:ES3、ES5 和 ES6

选择一种继承方式 JavaScript 是一门动态语言,动态意味着高灵活性,而这尤其可以体现在继承上面。JavaScript 中的继承有很多种实现方式,可以分成下面四类: Mixin 模式,即属性混入,从一个...

天方夜
07/04
0
0
Java编程学习:继承的概念及方法

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互...

Java小辰
05/30
0
0
java final和static用法总结

Java关键字final、static使用总结 一、final 根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类、非抽象类成员方法和变量。你可能出于两种理...

艾柯
2014/03/12
0
0
《Java从小白到大牛精简版》之第4章 Java语法基础

《Java从小白到大牛》纸质版已经上架了!! 本章主要为大家介绍Java的一些基本语法,其中包括标识符、关键字、保留字、常量、变量、表达式等内容。 4.1 标识符、关键字和保留字 任何一种计算...

tony关东升
06/26
0
0
Java学习资料-标识符、关键字

1、标识符 (1)Java对各种变量、方法和类等要素命名时使用的字符序列称为标识符。凡是自己可以起名字的地方都叫标识符,都遵守标识符的规则。 (2)Java标识符命名规则: 标识符由字母、下划...

晓阳
2015/01/05
0
0
Kotlin语言中的泛型设计哲学

Kotlin语言的泛型设计很有意思,但并不容易看懂。关于这个部分的官方文档,我反复看了好几次,终于弄明白Kotlin语言泛型设计的背后哲学。这篇文章将讲述Kotlin泛型设计的整个思考过程及其背后...

欧阳锋
04/16
0
0
Java基础笔记 -------------面向对象上(三大特性)

面向对象三个特性:继承(Inheritence)、封装(Encapsulation)、多态(Polymorphism). 1、封装(Encapsulation): 类包含了数据与方法,将数据与方法放在一个类中就构成了封装(一般来说,...

查封炉台
2014/04/21
0
0
java连接各种数据库(mysql,sql server,oracle,db2)

MYSQL: private String conUrl ="jdbc:mysql://localhost:3306/数据库"网站推广 Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection(conUrl,"用户名","密码"); S......

网络营销
2012/01/09
0
0
Java基础知识总结(绝对经典)

本人学习java时,做的java基础知识总结: 因内容较多,提供原文链接下载。 写代码: 1,明确需求。我要做什么? 2,分析思路。我要怎么做?1,2,3。 3,确定步骤。每一个思路部分用到哪些语句...

石小全
2012/04/08
0
6
【易错】对象锁 & 类锁(二)

一、synchronized关键字 synchronized关键字有如下几种用法: 非静态方法或静态方法上加入关键字synchronized; 使用synchronized(对象/this/类.class)静态快; 下面对上述两种情况进行区分。...

大白来袭
2017/07/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

HTML5和CSS3新特性一览

HTML5和CSS3新特性一览 HTML5 1.HTML5 新元素 HTML5提供了新的元素来创建更好的页面结构: 标签 描述 <article> 定义页面独立的内容区域。 <aside> 定义页面的侧边栏内容。 <bdi> 允许您设置...

全部原谅
8分钟前
0
0
编程开发进阶更重要的是掌握的核心设计思维[图]

编程开发进阶更重要的是掌握的核心设计思维[图]: “单独写一个琐碎的代码块就等同于弹奏音阶一样,不幸的是,弹奏音阶并不能教会你任何关于音乐的东西,并且非常枯燥” 这是 Eric S. Raymon...

原创小博客
10分钟前
0
0
怎样确保java代码在抛出异常时都回滚,而不只是运行时异常

/** TransactionAspectSupport手动回滚事务:*/ @Transactional(rollbackFor = { Exception.class }) public boolean test() { try { ......

gulf
11分钟前
0
0
TCP-Keepalive作用

TCP交互在三次握手确定连接之后,后续可能不会一直有数据在通讯,但此时双方的连接是保持的,如果在这段时间内没有数据,客户端(或服务端)突然关掉了,或者客户端到服务端之间的网络突然断...

sensy
11分钟前
0
0
Hive学习之Hive CLI

Hive命令行接口(CLI)提供了执行Hive QL、设置参数等功能,要启用CLI只需要在命令行下执行$HIVE_HOME/bin/hive命令。在命令下执行hive –H可以查看CLI选项,如下表所示: -d,--define <key...

舒运
14分钟前
0
0
hadoop新手学习笔记之hadoop产品大全

大数据这个词也许几年前你听着还会觉得陌生,但我相信你现在听到hadoop这个词的时候你应该都会觉得“熟悉”!越来越发现身边从事hadoop开发或者是正在学习hadoop的人变多了。作为一个hadoop入...

左手的倒影
15分钟前
0
0
MySQL5.7之开启远程连接

参考这个https://blog.csdn.net/qiyueqinglian/article/details/52778230

汉斯-冯-拉特
16分钟前
0
0
FileUtils API

一、概述 这是一个Java操作文件的常用库,是Apache对java的IO包的封装,这里面有两个非常核心的类FilenameUtils跟FileUtils,其中FilenameUtils是对文件名操作的封装;FileUtils是文件封装,开...

如风达
16分钟前
0
0
详解机器学习中的梯度消失、爆炸原因及其解决方法

前言 本文主要深入介绍深度学习中的梯度消失和梯度爆炸的问题以及解决方案。本文分为三部分,第一部分主要直观的介绍深度学习中为什么使用梯度更新,第二部分主要介绍深度学习中梯度消失及爆...

tantexian
21分钟前
0
0
JavaMail 发送邮件

参考 https://www.cnblogs.com/xdp-gacl/p/4216311.html 发送html格式邮件 package com.example.stumgr;import java.util.Properties;import javax.mail.Message;import javax.mail......

阿豪boy
22分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部