关于java:Java中关键词之thissuper的使用

一.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;



x = this.x++;
System.out.println("成员变量x的值: "+this.x+" 局部变量x的值: "+x);
//退出Java开发交换君样:756584822一起吹水聊天

}

局部变量和成员变量 同名 this.变量名 调用类 的成员变量和办法

  • 同时 有一个辨别的成果
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;
}*/
//退出Java开发交换君样:756584822一起吹水聊天
}

运行后果:

---------------
空
空
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.办法名 >>> 调用的是父类中的办法");
}
//退出Java开发交换君样:756584822一起吹水聊天
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();//退出Java开发交换君样:756584822一起吹水聊天
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();
//退出Java开发交换君样:756584822一起吹水聊天
}

}

运行后果:

父类无参结构被调用
子类无参结构被调用
调用父类中的成员变量:父类中的变量
调用子类的play()办法
super.办法名 >>> 调用的是父类中的办法

阐明:

  • [1 ] 在子类构造方法中要调用父类的构造方法,用“super(参数列表)”的形式调用,参数不是必须的。同时还要留神的一点是:“super(参数列表)”这条语句只能用在子类构造方法体中的第一行。
  • [ 2] 当子类办法中的局部变量或者子类的成员变量与父类成员变量同名时,也就是子类局部变量笼罩父类成员变量时,用“super.成员变量名”来援用父类成员变量。当然,如果父类的成员变量没有被笼罩,也能够用“super.成员变量名”来援用父类成员变量,不过这是不必要的。
  • [3 ] 当子类的成员办法笼罩了父类的成员办法时,也就是子类和父类有完全相同的办法定义(但办法体能够不同),此时,用“super.办法名(参数列表)”的形式拜访父类的办法。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理