Java中关键词之this,super的使用
一.this关键词介绍.
说明:该知识点仅仅限于本人对其了解的范围.
package com.study.java.oop;
/**
* 核心点:"this是指向对象本身的一个指针"
* 出现的位置: 只能用于方法的方法体内(且该方法是只能是类中的非静态方法)
* 静态方法和静态块中绝对不可使用
* 使用的方式:
* this(参数) >>> 调用的是类的构造方法 有参数调用的是 有参构造 无参 调用无参构造
* this.成员变量名 >>>调用类 的成员变量
* @author ys.zhangjy
*
*/
public class StudyOop02 {
private String username;
private String password;
private int number;
private int x;
public StudyOop02(){
this("空","空",20);//通过this()调用 构造方法
}
public StudyOop02(String username,String ps,int x){
this.username = username;// this.成员变量名 调用类的成员变量
this.password = ps;
this.x = x;
//System.out.println(username+"=="+password+"=="+x);
}
public StudyOop02(String username,int x){
this(username,"2个参数",x);
}
public void outprint(StudyOop02 s){
System.out.println("---------------");
System.out.println(s.username);
System.out.println(s.password);
System.out.println(s.number);
System.out.println(s.x);
System.out.println("---------------");
f();//写成 this.f() >>> 调用方法
}
private void f() {
int x = 200;
/**局部变量和成员变量 同名 this.变量名 调用类 的成员变量和方法
* 同时 有一个区分的效果**/
x = this.x++;
System.out.println("成员变量x的值: "+this.x+" 局部变量x的值: "+x);
}
public StudyOop02(String username, String passwrd, int number, int x) {
super();
this.username = username;
this.password = passwrd;
this.number = number;
this.x = x;
}
public static void main(String[] args) {
StudyOop02 s1 = new StudyOop02();
StudyOop02 s2 = new StudyOop02("小马甲",23);
s1.outprint(s1);
s2.outprint(s2);
/** 报错 this 不能在静态方法 中 使用**/
//System.out.println(this.username = "2222222");
}
/**
* 报错 this 不能在静态块 中使用
*/
/*static{
this.username = "xxx ";
this.password = "1111";
this.number = "11111";
this.x = 200000;
}*/
}
运行结果:
---------------
空
空
0
20
---------------
成员变量x的值: 21 局部变量x的值: 20
---------------
小马甲
2个参数
0
23
---------------
成员变量x的值: 24 局部变量x的值: 23
二.super 关键词使用.
父类:Father
package com.study.java.oop;
/**
* 出现的位置:子类中
* 使用 方式:子类中使用 核心点:子类在构造之前必定先构造父类 且super关键词只能出现在子类构造的第一行
* super.变量名 >>> 调用的是 父类中成员变量
* super.方法名 >>> 调用的是 父类中方法
* super(参数) >>> 调用父类的构造方法 有参调有参 无参调无参
* @author ys.zhangjy
*
*/
public class Father {
private String name ;
private String job;
private int age;
public String s = "父类中的变量";
public Father(){
System.out.println("父类无参构造被调用");
}
public Father(String name,String job,int age){
super();
this.name = name;
this.job = job;
this.age = age;
}
public void test(){
System.out.println("super.方法名 >>> 调用的是父类中的方法");
}
public void play(){
System.out.println("调用父类的play()方法");
}
}
子类:Sub
package com.study.java.oop;
public class Sub extends Father{
private String name ;
private String job;
private int age;
public String s = "子类中的成员变量";
public Sub(){
super();
System.out.println("子类无参构造被调用");
//super("小明","xiaoshou",20); 报错 说明super关键词只能出现在子类构造的第一行
}
public Sub(String name,String job,int age){
super("小明","xiaoshou",20);
System.out.println("子类有参构造被调用");
}
public void play(){
System.out.println("调用父类中的成员变量:"+super.s);
System.out.println("调用子类的play()方法");
super.test();
}
public void test(){
System.out.println("子类中的 方法");
}
public static void main(String[] args) {
Sub s = new Sub();
s.play();
}
}
运行结果:
父类无参构造被调用
子类无参构造被调用
调用父类中的成员变量:父类中的变量
调用子类的play()方法
super.方法名 >>> 调用的是父类中的方法
说明:
第一、在子类构造方法中要调用父类的构造方法,用“super(参数列表)”的方式调用,参数不是必须的。同时还要注意的一点是:“super(参数列表)”这条语句只能用在子类构造方法体中的第一行。
第二、当子类方法中的局部变量或者子类的成员变量与父类成员变量同名时,也就是子类局部变量覆盖父类成员变量时,用“super.成员变量名”来引用父类成员变量。当然,如果父类的成员变量没有被覆盖,也可以用“super.成员变量名”来引用父类成员变量,不过这是不必要的。
第三、当子类的成员方法覆盖了父类的成员方法时,也就是子类和父类有完全相同的方法定义(但方法体可以不同),此时,用“super.方法名(参数列表)”的方式访问父类的方法。
Java中关键词之this,super的使用的更多相关文章
- java中的this与super的区别
java中的this与super的区别 1. 子类的构造函数如果要引用super的话,必须把super放在函数的首位 代码如下: class Base { Base() { System.out.pr ...
- java中的this和super的作用和异同和C++中调用父类的构造函数
来源于:http://www.cnblogs.com/hasse/p/5023392.html 这几天看到类在继承时会用到this和super,这里就做了一点总结,与各位共同交流,有错误请各位指正~ ...
- Java中关键字this、super的含义及使用
Java语言中this的含义及作用: 关键字this用来指向当前实例对象(内存里正在运行的哪个实例对象),它的另一作用是用来区分对象的成员变量与方法的形参. 关键字super指的是当前对象里边的父对象 ...
- Java中的this和super
在Java中有两个非常特殊的变量:this和super,这两个变量在使用前都是不需要声明的.this变量使用在一个成员函数的内部,指向当前对象,当前对象指的是调用当前正在执行方法的那个对象.super ...
- java中构造方法和方法super/this超类与子类中初始化顺序
java中构造方法和方法全面解析 我相信大多说人都对构造方法.方法不陌生,而且很了解,但我也相信有很多像我这样的没有一个很好很清晰很全面的认识,今天就把它整理如下,希望能给大家带来点方便与帮助,也希望 ...
- java中的this、super、static、final、abstract关键字的作用
this关键字的作用 1.this是对象内部指代自身的引用,同时也是解决成员变量和局部变量同名问题: 2.this可以调用成员变量,不能调用局部变量: 3.this也可以调用成员方法,但在普通方法中可 ...
- Java中<? extends T>和<? super T>的理解
? 通配符类型 - <? extends T> 表示类型的上界,表示参数化类型的可能是T 或是 T的子类; <? super T> 表示类型下界(Java Core中叫超类型限 ...
- java中的this和super(构造函数)
1.this:表示当前对象 常用的代码: public class A{ private String name; public void setName(String name){ this.nam ...
- Java中this和super关键字
今天练习到Java中的this和super关键字,我有如下总结: 1.子类继承父类,子类初始化对象,必须先调用父类构造方法,因为随时有可能要使用父类的成员变量. 2.get和set方法只是对成员变量进 ...
随机推荐
- 单片机课程设计——《基于AT89S52单片机和DS1302时钟芯片的电子时钟(可蓝牙校准)》
引言 本设计以AT89S52单片机为控制核心,时钟芯片DS1302提供时钟源,配合LCD1602液晶显示模块,组成基本硬件系统,同时利用HC-05嵌入式蓝牙串口通讯模块,可在手机端进行日期.时间的校准 ...
- 【割点】【割边】tarjan
洛谷割点模板题--传送门 割边:在连通图中,删除了连通图的某条边后,图不再连通.这样的边被称为割边,也叫做桥.割点:在连通图中,删除了连通图的某个点以及与这个点相连的边后,图不再连通.这样的点被称为割 ...
- virtual box ubuntu 与Windows共享文件夹
由于懒得去截图了,直接抛链接.参考链接:http://www.cnblogs.com/lidabo/p/5317024.html 简介概括:首先安装增强功能,接着在virtual box的seting ...
- EF的DbSet属性的Where查询,注意事项
#1 Func<T,bool>与 Expression<Func<T,bool>>的区别 Func<T,bool>本身就是一个委托(delegate), ...
- Vue 事件驱动和依赖追踪
之前关于 Vue 数据绑定原理的一点分析,最近需要回顾,就顺便发到随笔上了 在之前实现一个自己的Mvvm中,用 setter 来观测model,将界面上所有的 viewModel 绑定到 model ...
- windows下批量换程序——运维常用
Windows一批机器,需要批量换程序.写个脚本给大家. net stop sharedaccess (关闭防火墙) del /s d:\*.log d:\*.vbs d:\*.pdb d:\*.vb ...
- Linux-进程描述(4)之进程优先级与进程创建执行
进程优先级 进程cpu资源分配就是指进程的优先权(priority).优先权高的进程有优先执行权利. 权限与优先级.权限(privilege)是指在多用户计算机系统的管理中,某个特定的用户具有特定的系 ...
- linux网络编程(socket)之面向连接(TCP/IP)
1.流程 服务器: 创建socket: 绑定端口: 监听: 监听到有连接请求,接受请求: 建立连接,开始对话. 客户端: 创建socket: 请求建立连接: 连接建立成功,开始对话. 2.实例代码 / ...
- ST-1之乱码bug
我印象最深刻的一个错误就是乱码.上学期末做web期末作业时候,我就遇到了好多乱码问题.乱码问题并不是程序本身的逻辑错误,但是却让程序的可用性非常的差.只有输入英文时才能判断结果的正确与否.而且编译器又 ...
- 倒计时(距离活动结束还有X天X小时X分X秒)
一个简单的倒计时,可以设定结束时间,然后自动计算出距离活动结束还有X天X小时X分X秒. 废话不多说,上代码,挺简单的,代码里有注释: // 活动倒计时 var time_end = new Date( ...