一.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. android参数传递的几种方法

    Intent Intent i=new Intent(当前Activity.this,目标Activity.class); 1.传单值 传入: i. i.putExtra("名称" ...

  2. dispatch_group_t 日常使用注意事项

    一.背景简介平时在进行多线程处理任务时,有时候希望多个任务之间存在着一种联系,希望在所有的任务执行完后做一些总结性处理.那么就可以将多个任务放在一个任务组中进行统一管理.dispatch提供了相应的A ...

  3. JS自定义对象,正则表达式,JQuery中的一些知识点

    一:自定义对象 1.基本概念:①对象:包含一系列无序属性和方法的集合.②键值对:对象中的数据是以键值对的形式存在的,以键取值.③属性:描述对象特征的一系列变量.[对象中的变量]④方法:描述对象行为的一 ...

  4. yii框架后台过滤器的使用 安全防护

    Yii过滤器简介 过滤器是一段代码,可被配置在控制器动作执行之前或之后执行.例如, 访问控制过滤器将被执行以确保在执行请求的动作之前用户已通过身份验证:性能过滤器可用于测量控制器执行所用的时间. 一个 ...

  5. 分享一个随机更改 MAC地址 软件

    有些软件 是根据 MAC地址 来判断 是不是 已经 安装过 这个 软件 (针对 有些软件是 可以 免费 使用的 ) 要想 一直 使用 的话 只需要 修改一下 mac地址 就可以 继续 使用! 在百度中 ...

  6. Lambda表达式随笔

    1.Lambda表达式是一个匿名函数,其本质其实还是一个函数,因此任何一个Lambda表达式都可以以其它的方式通过普通的函数实现或者代替. 2.Lambda表达式云算符:=>,该运算符读为&qu ...

  7. DirectFB学习笔记二

    本篇目的,画一个方框,在方框上画一串字符. 实现步骤:首先创建IDirectFB接口,通过它再创建要显示的表面surface,同时创建字体font,绘制字符必须要设置绘制的字体,否则绘制不成功.然后清 ...

  8. JSP动态员工登陆案例

    package web; import java.io.IOException; import java.io.PrintWriter; import java.util.List; import j ...

  9. windows下编译java源文件的编码错误

    import java.util.Arrays;public class ArrayAsAReference{ public static void main(String[] args) { int ...

  10. System.Data.SqlClient.SqlException (0x80131904): EXECUTE 后的事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配。上一计数 = 1,当前计数 = 0。 EXECUTE 后的事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配。上一计数 = 1,当前计数 = 0。

    EF使用ExecuteSqlCommand(db.Database.ExecuteSqlCommand("exec proc_DeleteCaseInfo_Output @caseID&qu ...