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 ...
随机推荐
- sklearn中调用集成学习算法
1.集成学习是指对于同一个基础数据集使用不同的机器学习算法进行训练,最后结合不同的算法给出的意见进行决策,这个方法兼顾了许多算法的"意见",比较全面,因此在机器学习领域也使用地非常 ...
- 微信小程序中,如何点击链接跳转到外部网页
跳转到内部链接 这个我们应该都知道,通过wx.navigateTo,wx.redirectTo,wx.swtichTab等小程序内部的方法,可以直接跳转到小程序内部已经注册的(就是在app.json中 ...
- uni app中使用自定义图标库
项目中难免会用到自定义图标,那在uni app中应该怎么使用呢? 首先, 将图标目录放在static资源目录下: 在main.js中引入就可以全局使用了 import '@/static/icon-o ...
- 连续(Continuity) - 有界(Bounded) - 收敛(Convergence)
连续(Continuity) 所有点连续 -> 一致连续 (uniform continuity) -> 绝对连续 -> 李普希兹连续(Lipschitz) 弱 ...
- springboot常见注解 2020-01-19
1,@SpringBootApplication 是springboot的核心注解,用在启动类上,是由 @Configuration 加载spring,配置spring并启动spring容器; 启动容 ...
- Adapter之spinner
前言: 在写代码当中有时候会用到下拉列表,下面我们讲一下spinner 正文: 因为比较简单,和之前的listView很像,所以直接上代码 <Spinner android:layout_wid ...
- 第十届蓝桥杯 RSA解密(C++/ java)
一道不错的题目,借鉴了网上的代码,用了拓展欧几里得算法求逆元,再用快速乘求每次a的余数,再快速幂对余数进行幂运算. #include <bits/stdc++.h> using names ...
- Timetable CodeForces - 946D (预处理+背包)
题意:n天m节课,最多可以逃k节课,每天在学校待的时间为该天上的第一节课到最后一节课持续的时间.问怎样逃课可以使这n天在学校待的时间最短,输出最短的时间. 分析: 1.预处理出每天逃j节课时在学校待的 ...
- C++面试常见问题——14内存管理
内存管理 内存管理由三种方式: 自动存储 静态存储 动态存储 自动存储 对于函数的形参.函数内部变量.和结构体变量等,编译器在函数运行过程中在栈中自动对其分配内存,调用结束后对其进行销毁.变量的声明周 ...
- loadBeanDefinitions方法源码跟踪(一)
看这篇文章之前可以先了解之前的跟踪流程,https://www.jianshu.com/p/4934233f0ead 代码过宽,可以shift + 鼠标滚轮 左右滑动查看 AbstractBeanDe ...