知识点:

在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. virtualenv 使用

    一.安装 pip install virtualenv 因为我已经安装了pip,那么就直接用pip来安装了,简单方便. 其它的安装方式请参考官方网站:http://www.virtualenv.org ...

  2. mongodb基础语法

    Mongodb与关系型数据库最大的区别就是无约束, 既无字段(外键等)约束, 也没有数据类型约束, 以json存储 安装 启动Mongodb(默认在c盘找 data/db/文件夹) 服务端: mong ...

  3. [LeetCode] 176. Second Highest Salary_Easy tag: SQL

    Write a SQL query to get the second highest salary from the Employee table. +----+--------+ | Id | S ...

  4. 简单的js动态显示当前时间

    js中获取当前时间首先我们要new一个时间对象 var data = new Date(); 然后可以点出很多方法.获取不同的时间格式 自己可以去尝试

  5. 分布式一致性Hash

    转载: https://blog.csdn.net/bntX2jSQfEHy7/article/details/79549368 为什么要有Hash一致性算法?就像以前介绍为什么要有Spring一样, ...

  6. 后台维护常用SQL

    OU.库存组织与子库存 select hou.organization_id ou_org_id, --org_id hou.name ou_name, --ou名称 ood.organization ...

  7. 《Enhanced LSTM for Natural Language Inference》(自然语言推理)

    解决的问题 自然语言推理,判断a是否可以推理出b.简单讲就是判断2个句子ab是否有相同的含义. 方法 我们的自然语言推理网络由以下部分组成:输入编码(Input Encoding ),局部推理模型(L ...

  8. nginx安装,反向代理配置

    1.centos 版本 下载最新稳定版 https://www.nginx.com/resources/wiki/start/topics/tutorials/install/# 2.执行语句: ./ ...

  9. cmd中mysql中文乱码问题

    以下为自己亲试: 解决cmd中MySQL查询和命令返回的中文乱码问题 1.修改cmd字符集方法 rem 切换到UTF-8 chcp 65001 rem 切换到默认的GBK chcp 936 rem 美 ...

  10. 【R】书籍推荐

    From: http://xccds1977.blogspot.com/2013/02/r.html http://www.1point3acres.com/bbs/thread-51301-1-1. ...