一.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的使用的更多相关文章

  1. java中的this与super的区别

    java中的this与super的区别 1. 子类的构造函数如果要引用super的话,必须把super放在函数的首位 代码如下: class Base { Base() { System.out.pr ...

  2. java中的this和super的作用和异同和C++中调用父类的构造函数

    来源于:http://www.cnblogs.com/hasse/p/5023392.html 这几天看到类在继承时会用到this和super,这里就做了一点总结,与各位共同交流,有错误请各位指正~ ...

  3. Java中关键字this、super的含义及使用

    Java语言中this的含义及作用: 关键字this用来指向当前实例对象(内存里正在运行的哪个实例对象),它的另一作用是用来区分对象的成员变量与方法的形参. 关键字super指的是当前对象里边的父对象 ...

  4. Java中的this和super

    在Java中有两个非常特殊的变量:this和super,这两个变量在使用前都是不需要声明的.this变量使用在一个成员函数的内部,指向当前对象,当前对象指的是调用当前正在执行方法的那个对象.super ...

  5. java中构造方法和方法super/this超类与子类中初始化顺序

    java中构造方法和方法全面解析 我相信大多说人都对构造方法.方法不陌生,而且很了解,但我也相信有很多像我这样的没有一个很好很清晰很全面的认识,今天就把它整理如下,希望能给大家带来点方便与帮助,也希望 ...

  6. java中的this、super、static、final、abstract关键字的作用

    this关键字的作用 1.this是对象内部指代自身的引用,同时也是解决成员变量和局部变量同名问题: 2.this可以调用成员变量,不能调用局部变量: 3.this也可以调用成员方法,但在普通方法中可 ...

  7. Java中<? extends T>和<? super T>的理解

    ? 通配符类型 - <? extends T> 表示类型的上界,表示参数化类型的可能是T 或是 T的子类; <? super T> 表示类型下界(Java Core中叫超类型限 ...

  8. java中的this和super(构造函数)

    1.this:表示当前对象 常用的代码: public class A{ private String name; public void setName(String name){ this.nam ...

  9. Java中this和super关键字

    今天练习到Java中的this和super关键字,我有如下总结: 1.子类继承父类,子类初始化对象,必须先调用父类构造方法,因为随时有可能要使用父类的成员变量. 2.get和set方法只是对成员变量进 ...

随机推荐

  1. 基于 Haproxy 构建负载均衡集群

    1.HAPROXY简介 HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种负载均衡解决方案.HAProxy特别适用于那些负载特大的web ...

  2. 【转载】static关键字详解

    上一篇博客中,因为一个static关键字没有设置好,导致浪费了大量的时间来寻找程序的错误,归根结底,就是大一的时候c语言没有学好. 现在总算知道了,你现在所学的每一个知识点在不就的以后可能及时你的救命 ...

  3. Nmap功能与常用命令

    Nmap功能与常用命令 其基本功能有三个,一是探测一组主机是否在线:其次是扫描主机端口,嗅探所提供的网络服务:还可以推断主机所用的操作系统. Nmap可用于扫描仅有两个节点的LAN,直至500个节点以 ...

  4. 修改nagios密码和遇到的问题

    htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin 密码 密码 service httpd restart 由于本屌丢掉一个s使/ ...

  5. SQL Server 中统计信息直方图中对于没有覆盖到谓词预估以及预估策略的变化(SQL2012-->SQL2014-->SQL2016)

    本位出处:http://www.cnblogs.com/wy123/p/6770258.html 统计信息写过几篇了相关的文章了,感觉还是不过瘾,关于统计信息的问题,最近又踩坑了,该问题虽然不算很常见 ...

  6. 关于Integer与int

    integer a=new integer(1); integer b=new integer(1); int c=1; integer d=1; a==b  false因为地址不同: a==c  t ...

  7. python2与python3的不兼容_urllib2

    网页下载器:将URL对应的网页以HTML下载到本地,用于后续分析 常见网页下载器:Python官方基础模块:urllib2 第三方功能包:requests python 3.x中urllib库和uri ...

  8. JavaEE开发之记事本完整案例(SpringBoot + iOS端)

    上篇博客我们聊了<JavaEE开发之SpringBoot整合MyBatis以及Thymeleaf模板引擎>,并且在之前我们也聊了<Swift3.0服务端开发(五) 记事本的开发(iO ...

  9. hdu4463 Outlets 最小生成树

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4463 很裸的一道题目,稍微处理一下输入即可 代码: #include<iostream> ...

  10. Java学习笔记--链表

    心在山东身在吴,飘蓬江海漫嗟吁. 他时若遂凌云志, 敢笑黄巢不丈夫. --水浒传 先上源代码,LinkedList类: private static class Node<E> { E i ...