Java中的super关键字和this关键字作用介绍
一、super关键字的作用
1、子类在构造方法中显示调用父类构造方法
super可以在子类的构造方法中显示调用父类的构造方法;并且这行代码必须出现在子类构造方法的第一行。原因:因为父类构造方法没有执行之前父类的属性和方法还没有被创建,则子类不能继承父类的属性和方法,因此子类的构造方法不能被执行。
/**
* 子类:构造方法的第一行要保证显示或者隐式的调用构造方法
* @author Administrator
*
*/
public class Teacher extends Person {
//继承自父类的空构造函数
public Teacher() { }
public Teacher(String name, int age, String gender) {
//1. 出现在子类构造函数的第一行,用于调用父类的构造方法
super(name, age, gender);
}
private String course;
public void teach() {
System.out.println("教...");
} }
2.可以在子类中充当临时父类对象
可以在子类内部代表父类对象,从而在子类中访问父类的属性和方法。
class Person01 {
private String name;
private int age;
public void say() {
System.out.println("人说....");
return null;
}
public void eat() {
System.out.println("人吃....");
}
}
class Teacher01 extends Person01 {
@Override
public C say() {
System.out.println("老师在一本正经的说...");
return null;
}
//注解的作用:防止开发者误写,起到提示作用
@Override
public void eat() {
System.out.println("洗个手");
//2. super作用:super类似于父类的虚拟对象
super.eat();
System.out.println("抽根烟...");
}
}
二、this关键字的作用
1、代表当前对象
在类的内部永远代表正在执行此代码的对象;在成员方法和构造方法内部,都可以通过this来明确访问类中的成员属性和成员方法。
public class Person03 {
String name;
int age;
//构造代码块:直接在类中编写一对大括号,构造代码块可以访问到之前定义的属性
{
System.out.println("构造代码块!" + name);
}
{
say();
System.out.println("构造代码块2!" + this);
}
public Person03(){
System.out.println("构造方法!");
}
public Person03(String name, int age) {
//1. 指向无参构造方法
this();
//2. 代表正在执行此代码的对象
this.name = name;
this.age = age;
}
void say() {
System.out.println("成员方法说动作");
}
{
say();
System.out.println("构造代码块3!");
}
public static void main(String[] args) {
Person03 p = new Person03();
p.say();
//匿名创建对象:创建对象只会用一次并且立即使用,而不用赋值给一个引用,即为创建了一个匿名对象
new Person03().say();
}
}
2、指向某个构造方法
在构造方法内部通过this(参数列表),可以调用其他构造方法。
注意:使用这种用法时,this()必须出现在当前构方法的第一行。
三、super和this的共同点和区别
共同点:super和this都可以代表一个临时对象执行构造函数,并且都要放在构造函数的第一行;
不同点:super一般用在子类中,用于代表父类的对象;this用于当前类中,用于代表正在执行该代码的对象。
Java中的super关键字和this关键字作用介绍的更多相关文章
- Java中的Serializable接口和transient关键字
Java中的Serializable接口和transient关键字 Table of Contents 1. 向memcached中放数据时遇到NotSerializableException异常 2 ...
- 总结java中的super和this关键字
知识点: 在java类中使用super引用父类的成分,用this引用当前对象 this可以修饰属性.构造器.方法 super可以修饰属性.构造器.方法 关于子类实例化过程中的内存分配,在下一篇博客中说 ...
- JAVA中的super和this关键字的使用
一 this关键字 this关键字可以出现在构造方法和实例方法中,不能出现在静态方法中,这是因为静态方法可以用类名来调用,这时可能还没有任何对象诞生. this主要有两种用法: 1 用在构造方法中,调 ...
- java 之 继承 super关键籽 this关键字 final关键字
继承 语法: 使用 extends 来继承 class子类 extends父类{ 子类属性 子类方法 } 继承的特点: 1.子类会把父类所有的属性和方法继承下来,final修饰的类是不可以被继承 ...
- Java中的super与this解析
好了,现在开始讨论this&super这两个关键字的意义和用法. 在Java中,this通常指当前对象,super则指父类的.当你想要引用当前对象的某种东西,比如当前对象的某个方法,或当前对象 ...
- java中的super限定
super的用法: (1)如果需要在子类中调用父类中被覆盖的实例方法,可以用super限定来调用父类中被覆盖的方法.当然,也可以调用从父类继承的实例变量. public void callOverri ...
- [转]Java中继承、多态、重载和重写介绍
什么是多态?它的实现机制是什么呢?重载和重写的区别在那里?这就是这一次我们要回顾的四个十分重要的概念:继承.多态.重载和重写. 继承(inheritance) 简单的说,继承就是在一个现有类型的基础上 ...
- JAVA 中无锁的线程安全整数 AtomicInteger介绍和使用
Java 中无锁的线程安全整数 AtomicInteger,一个提供原子操作的Integer的类.在Java语言中,++i和i++操作并不是线程安全的,在使用的时候, 不可避免的会用到synchron ...
- Java中Class和单例类的作用与类成员的理解
Java中Class类的作用与深入理解 在程序运行期间,Java运行时系统始终为所有的对象维护一个被称为运行时的类型标识.这个信息跟踪着每个对象所属的类.JVM利用运行时信息选择相应的方法执行.而保存 ...
- Java中@Deprecated、@SupressWarning、@Override的作用
Annotation注解在 Java 中有着很广泛的,他是做为一种标识 为javac所识别.每一个注解 都对应这一个Java类 在java.lang包中 有三个注解 分别是 Deprecated ...
随机推荐
- JS数组精简的十三个技巧
1.删除数组的重复项 第一种方式 var fruits = ['banana', 'apple', 'orange', 'apple', 'orange', 'grape', 'watermelon' ...
- Vue Element-Ui 改变el-Input背景样式
Element-ui是一个非常好的UI设计模块,它提供给我们很多好看的按钮样式,非常适用于快速搭建UI,下面说说如果使用了element-ui之后,要更改它默认的el-Input样式应该怎么操作. 使 ...
- 为何以及如何学Linux系统?
在当今的社会中,linux用处实在是太过广泛了.现在用在服务器和嵌入式上的Linux发行版本数不胜数,桌面上linux只占1%的比例,但这不代表linux比windows和mac 做得差,实际上桌面系 ...
- JS 一键复制插件应用 和 原生实现
一.目前来说复制功能 clipboard.js基本可以兼容所有浏览器,可以任意复制文本,官方地址 https://clipboardjs.com/ 1.进入官方网站下载 然后引入 <script ...
- windows环境变量引发的血案
最近重装了系统,决心使用Anaconda来管理python包和虚拟环境.在完成一系列配置后,运行程序,发现老是报错 D:\Anaconda3\envs\jobnote>python E:\wor ...
- php 实现店铺装修2
<?php namespace Webapp\Model; use Common\Model\DataModel\FlagShopCategoryModel; use Common\Model\ ...
- 厉害了!SpringBoot是如何动起来的!
程序入口 SpringApplication.run(BeautyApplication.class, args); 执行此方法来加载整个SpringBoot的环境. 1. 从哪儿开始? Spring ...
- 086、Java数组之对象数组的动态初始化
01.代码如下: package TIANPAN; class Book { private String title; private double price; public Book(Strin ...
- MyBatis学习之简单增删改查操作、MyBatis存储过程、MyBatis分页、MyBatis一对一、MyBatis一对多
一.用到的实体类如下: Student.java package com.company.entity; import java.io.Serializable; import java.util.D ...
- Python集合语法
a = {1,2,3,4,5,6,7,8,"aa","2"} b = {2,3,4,5,6,7,8,9,99,7,6,6} v = a.intersect ...