共计 3645 个字符,预计需要花费 10 分钟才能阅读完成。
1、this
1.1、this 概述
this 是自身的一个对象,代表对象本身,是非静态对象,可以理解为:指向对象本身的一个指针。
public class ThisDemo {public static void main(String[] args) {//this.print();//this 是非静态对象 | |
new ThisDemo().view(); | |
} | |
public void view() {this.print();} | |
public void print() {System.out.println("ThisDemo"); | |
} | |
} |
运行结果:
1.2、this 应用
1.2.1、直接引用
this 相当于是指向当前对象本身。
public class ThisDemo01 {String s = "Hello"; | |
public ThisDemo01(String s1) {System.out.println("s =" + s1); | |
//this 当前对象,调用 s 属性 | |
System.out.println("1 -> this.s =" + this.s); | |
this.s = s1;// 把参数值赋给成员变量,成员变量的值改变 | |
System.out.println("2 -> this.s =" + this.s); | |
} | |
public static void main(String[] args) {ThisDemo01 x = new ThisDemo01("HelloWorld!"); | |
System.out.println("s=" + x.s);// 验证成员变量值的改变 | |
} | |
} |
运行结果:
1.2.2、形参与成员变量名字重名,用 this 来区分
class Person {private int age = 10; | |
public Person() {System.out.println("初始化年龄:" + age); | |
} | |
public int GetAge(int age) {this.age = age; | |
return this.age; | |
} | |
} | |
public class ThisDemo02 {public static void main(String[] args) {Person Harry = new Person(); | |
System.out.println("Harry's age is " + Harry.GetAge(12)); | |
} | |
} |
运行结果:
1.2.3、引用构造函数
这个我们用 super 一起讲。
1.2.4、同时传递多个参数
public class ThisDemo03 {int x; | |
int y; | |
static void showtest(ThisDemo03 tc) {// 实例化对象 | |
System.out.println(tc.x + " " + tc.y); | |
} | |
void seeit() {showtest(this); | |
} | |
public static void main(String[] args) {ThisDemo03 p = new ThisDemo03(); | |
p.x = 9; | |
p.y = 10; | |
p.seeit();} | |
} |
运行结果:
2、super
2.1、super 概述
super 可以理解为是指向自己超(父)类对象的一个指针,而这个超类指的是离自己最近的一个父类。
2.2、super 应用
2.2.1、直接引用
与 this 类似,super 相当于是指向当前对象的父类,这样就可以用 super.xxx 来引用父类的成员。
class A{public void print(){System.out.println("A"); | |
} | |
} | |
public class SuperDemo01 extends A{public static void main(String[] args) {//super.print();//super 是非静态对象 | |
new SuperDemo01().view(); | |
} | |
public void view(){super.print();} | |
} |
运行结果:
2.2.2、子类成员重写父类成员后
子类中的成员变量或方法与父类中的成员变量或方法同名
class Country { | |
String name; | |
void value() {name = "China"; | |
} | |
} | |
public class City extends Country { | |
String name; | |
void value() {name = "Shanghai"; | |
super.value(); // 调用父类的方法 | |
System.out.println(name); | |
System.out.println(super.name); | |
} | |
public static void main(String[] args) {City c=new City(); | |
c.value();} | |
} |
运行结果:
2.2.3、引用构造函数
super(参数):调用父类中的某一个构造函数(应该为构造函数中的第一条语句)。
this(参数):调用本类中另一种形式的构造函数(应该为构造函数中的第一条语句)。
package cn.com.tyschool.demo001; | |
class Persones{public void prt(String s) {System.out.println(s); | |
} | |
// 构造方法 (1) | |
public Persones() {prt("父类·无参数构造方法:"+"A Person."); | |
} | |
// 构造方法 (2) | |
public Persones(String name) {prt("父类·含一个参数的构造方法:"+"A person's name is " + name); | |
} | |
} | |
public class Chinese extends Persones {Chinese() {super(); // 调用父类构造方法(1) | |
prt("子类·调用父类”无参数构造方法“:"+"A chinese coder."); | |
} | |
Chinese(String name) {super(name);// 调用父类具有相同形参的构造方法(2) | |
prt("子类·调用父类”含一个参数的构造方法“:"+"his name is" + name); | |
} | |
Chinese(String name, int age) {this(name);// 调用具有相同形参的构造方法(3) | |
prt("子类:调用子类具有相同形参的构造方法:his age is" + age); | |
} | |
public static void main(String[] args) {Chinese cn = new Chinese(); | |
cn = new Chinese("codersai"); | |
cn = new Chinese("codersai", 18); | |
} | |
} |
运行结果:
3、this/super 区别
3.1、super()/this()
super(参数):调用父类中的某一个构造函数(应该为构造函数中的第一条语句)
this(参数):调用本类中另一种形成的构造函数(应该为构造函数中的第一条语句)
class A{public A(){System.out.println("无参"); | |
} | |
public A(int x){System.out.println("参数为:"+x); | |
} | |
} | |
class B extends A{public B(){//super(); | |
super(12); | |
} | |
public static void main(String args[]){new B();} | |
} |
class B{public B(){this(12); | |
} | |
public B(int x){System.out.println("参数为:"+x); | |
} | |
public static void main(String args[]){new B();} | |
} |
3.2、super/this
super: 它引用当前对象的直接父类中的成员(用来访问直接父类中被隐藏的父类中成员数据或函数),基类与派生类中有相同成员定义时如:
super. 成员(成员变量、成员方法)
this:它代表当前对象名(在程序中易产生不同意义,应使用 this 来指明当前对象;如果函数的形参与类中的成员数据同名,这时需用 this 来指明成员变量名)
class A{public void a(){System.out.println("a"); | |
} | |
} | |
class B extends A{public static void main(String args[]){B b=new B(); | |
b.b();} | |
public void a(){System.out.println("b"); | |
} | |
public void b(){super.a();} | |
} |
class B{int x=12; | |
public static void main(String args[]){new B().b(13); | |
} | |
public void b(int x){System.out.println(x); | |
System.out.println(this.x); | |
} | |
} |
3.3、super/this 为非静态成员
class B{public static void main(String args[]){//super. 成员 // 不能在静态方法里面使用 | |
} | |
} |
class B{public static void main(String args[]){//this. 成员 // 不能在静态方法里面使用 | |
} | |
} |
正文完
星哥玩云-微信公众号
