知识点:

在java类中使用super引用父类的成分,用this引用当前对象

this可以修饰属性、构造器、方法

super可以修饰属性、构造器、方法

关于子类实例化过程中的内存分配,在下一篇博客中说明一下(https://www.cnblogs.com/shuaifing/p/10684485.html)

一:this关键字

this可以修饰属性、构造器、方法;用this引用当前对象

(1)this修饰属性,调用类的属性

//set方法
public void setName(String name) {
this.name = name;
} //有参数构造函数
public Person(String name){
this.name=name;
} (2)this修饰构造器,在构造器中通过 this(形参)的方式显示地调用本类中,其他重载的指定的构造器(在构造器内部必须声明在首行)
public Person(){
System.out.println("调用当前类的无参构造函数");
}
public Person(String name){
this();//调用本类中无参构造函数
this.name=name;
} public Person(String name,int age){
this(name); //在构造器中通过 this(形参)的方式显示地调用本类中,其他重载的指定的构造器(在构造器内部必须声明在首行)
this.age=age;
}
(3)this修饰成员方法,调用类的方法
public void showInfo(){
System.out.println("调用当前类的成员方法showInfo");
}
public void showAllInfo(){
this.showInfo();
System.out.println("调用当前类的成员方法showAllInfo");
} 二:super关键字 super可以修饰属性、构造器、方法;用super引用父类的成分

(1)super修饰属性,引用父类的属性
当子类与父类的属性同名时,通过“super.属性”显示地调用父类中声明的属性
调用子类的同名属性,使用“this.属性”
//动物
public class Animal{
public String gender="男";//性别 public Animal(){
this.name="张三";
System.out.println("动物无参构造函数!");
}
}
//人
public class Person extends Animal {
public Person(){
super.gender="女";//子类无参构造函数中,调用父类的属性,并修改父类的gender属性
System.out.println("人无参构造函数!");
}
}
(2)super修饰构造方法,引用父类的构造方法
一般在子类中使用“super(形参列表)”来显示地调用父类中的构造方法
a.在构造方法内部,super(形参列表)必须申明在首行
b.在构造方法内部,因为this(形参列表)也必须声明在首行,所以this(形参列表)或者super(形参列表),只能出现一个
c.当子类构造器中,不显地调用“this(形参列表)”或者super(形参列表)其中任何一个,默认调用的是父类的空参构造函数
//生物
public class Creature {
public Creature(){
//进入到Creature类的无参构造函数后,首先会调用父类Object的无参构造函数(object中隐藏了)
//super()无参的构造函数,不写的话,默认有的
System.out.println("生物无参构造函数!");
}
}
//动物
public class Animal extends Creature{
public Animal(){
super();//进入到Animal类的无参构造函数后,首先会调用父类Creature的无参构造函数,实例化父类Creature实例
System.out.println("动物无参构造函数!");
}
}
//人
public class Person extends Animal {
public Person(){
super();//进入到person类的无参构造函数后,首先会调用父类Animal的无参构造函数,实例化父类Animal实例
System.out.println("人无参构造函数!");
}
}
//测试类
public class Test {
public static void main(String[] args) {
Person p=new Person();//初始化p实例时,会调用Person类的无参构造函数
}
}  运行结果:
 (3)super修饰成员方法,引用父类的成员方法
当子类重写父类的方法后,在子类中,想显示地调用父类中被重写的方法,可以使用“super.方法”
//动物
public class Animal extends Creature{ //展示动物属性方法
public void showInfo(){
System.out.println("展示动物属性方法");
}
}
//人
public class Person extends Animal {
//展示人类属性方法
@Override
public void showInfo(){
     System.out.println("展示人类属性方法");
super.showInfo();
}
}
 

总结java中的super和this关键字的更多相关文章

  1. JAVA中的super和this关键字的使用

    一 this关键字 this关键字可以出现在构造方法和实例方法中,不能出现在静态方法中,这是因为静态方法可以用类名来调用,这时可能还没有任何对象诞生. this主要有两种用法: 1 用在构造方法中,调 ...

  2. Java中的break和continue关键字使用总结

    java中的break和continue关键字使用总结   一.作用和区别   break的作用是跳出当前循环块(for.while.do while)或程序块(switch).在循环块中的作用是跳出 ...

  3. Java中的super与this解析

    好了,现在开始讨论this&super这两个关键字的意义和用法. 在Java中,this通常指当前对象,super则指父类的.当你想要引用当前对象的某种东西,比如当前对象的某个方法,或当前对象 ...

  4. Java中替代C# ref/out 关键字方案:

    刚学习Java不久,今天遇到一个问题,需要在方法中修改传入的对象的值,确切的说是需要使用一个方法,创建一个对象,并把其引用返回,熟悉C#的我的第一反应就是C#中的ref/out关键字,结果发现Java ...

  5. 从缓存入门到并发编程三要素详解 Java中 volatile 、final 等关键字解析案例

    引入高速缓存概念 在计算机在执行程序时,以指令为单位来执行,每条指令都是在CPU中执行的,而执行指令过程中,势必涉及到数据的读取和写入. 由于程序运行过程中的临时数据是存放在主存(物理内存)当中的,这 ...

  6. Java中的static、final关键字

    static static 的含义是静态的,是一个静态修饰符,一般来说,被static修饰的有以下几种,类.变量.方法.代码块. static修饰类 Java中普通的类是不允许被声明为静态的,但是有一 ...

  7. java中的super限定

    super的用法: (1)如果需要在子类中调用父类中被覆盖的实例方法,可以用super限定来调用父类中被覆盖的方法.当然,也可以调用从父类继承的实例变量. public void callOverri ...

  8. java中static,super,final关键字辨析

    1:static关键字 利:1)对对象的共享数据提供单独的空间存储. 2)修饰的方法可以直接被类名调用 弊:1)生命周期长. 2)访问出现限制(只能访问静态) 它可以有静态方法,静态类,静态变量 2: ...

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

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

随机推荐

  1. [解决]WPF 在 win7 系统无法运行:FileNotFoundException

    开发环境:VS2015 + .NET 4.6.2 开发项目1:WPF + CefSharp 开发项目2:WPF 情况:两个项目编译的程序都无法在客户环境的 win7上运行,事件查看器中如下日志: Th ...

  2. json数据爬虫。requests实现

    get请求 import json import requests # url = "https://www.mamalaile.cn/mamalailegw/page/waiterList ...

  3. iOS常用第三方类库及Xcode插件

    第三方类库(github地址): 1.AFNetworking 网络数据     https://github.com/AFNetworking/AFNetworking 2.SDWebImage 图 ...

  4. ES6(简)

    一. let.const 和 var let和const只在当前块级作用域中有效const用来声明常量var是全局作用域有效的 constants.js 模块export const A = 1;ex ...

  5. 微信小程序- wx.request请求不到数据

    小程序官方文档手册 https://mp.weixin.qq.com/debug/wxadoc/dev/ 小程序开发问答社区 http://www.henkuai.com/forum.php wx.r ...

  6. redis桌面管理工具 redis-desktop-manager使用指南(转)

    版权声明:转自 http://blog.csdn.net/li396864285/article/details/54629898     概要:一款好用的Redis桌面管理工具,支持命令控制台操作, ...

  7. 023-centos6.5上安装使用xtrabackup

    第一步:下载.这个就看你选择什么样的安装方式了,有二进制安装,有源码包安装,有在线的rpm安装.我选择二进制安装方式,所以下载时选择linux-Generic.下载后用rz命令在xshell上上传到l ...

  8. 【转】Redis之发布 订阅模式

    本例包括 jedis_demo:入口类 jedis_control:jedis控制器(jedis的连接池) jedis_pub_sub_listener:订阅的监听器 singleton_agent: ...

  9. Java(16-19)

    0. 正则表达式: str.matches()  //判断字符串是否匹配 str.split()  // 根据给定正则表达式的匹配规则.拆分此字符串,返回字符串数组. str.replaceAll() ...

  10. mysql数据安装问题汇总

    1.mysql安装冲突:conflicts with file from package 看到“conflicts”,是产生冲突了,文件“/usr/share/mysql/charsets/*”需要M ...