1、this的用法
this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针。
有三种用法:
1)、指向当前对象本身,略;
2)、与形参名字相同,用与区分:
class
Person {
private
int
age =
10
;
public
Person(){
System.out.println(
"初始化年龄:"
+age);
}
public
int
GetAge(
int
age){
this
.age = age;
return
this
.age;
}
}
3)、引用构造函数,与super有一腿;
2、super
1)、指向当前对象的最近的父类,用super.xxx调用父类的属性和方法;
2)、子类中的成员变量或方法与父类中的成员变量或方法重名:
class
Country {
String name;
void
value() {
name =
"China"
;
}
}
3)、引用构造函数:
class
Person {
public
static
void
prt(String s) {
System.out.println(s);
}
Person() {
prt(
"父类·无参数构造方法: "
+
"A Person."
);
}
//构造方法(1)
Person(String name) {
prt(
"父类·含一个参数的构造方法: "
+
"A person's name is "
+ name);
}
//构造方法(2)
}
public
class
Chinese
extends
Person {
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
);
}
}
运行结果:
父类·无参数构造方法: A Person.
子类·调用父类”无参数构造方法“: A chinese coder.
父类·含一个参数的构造方法: A person's name is codersai
子类·调用父类”含一个参数的构造方法“: his name is codersai
父类·含一个参数的构造方法: A person's name is codersai
子类·调用父类”含一个参数的构造方法“: his name is codersai
子类:调用子类具有相同形参的构造方法:his age is 18
super和this可以调用父类和本类中的各种形式的构造方法;但从本质上将this是一个指针指向本对象,而super是一个关键字;
4、子类是否会继承父类的构造方法
先给结论:
1)、子类实例化对象时,会调用父类的构造方法;
2)、如果子类没有显式的调用父类的构造方法,则会默认调用super;
3)、如果父类中没有无参构造方法,而子类中又没有显示调用父类构造方法,则编译器报错。如果用super显式调用父类带参的构造方法,需要将其置于第一句,否则编译器报错。
例子如下:
不显式调用父类带参方法,报错。