Java类和继承
概述
super 方法
概述
- 从本质上讲,this 是一个指向本对象的指针, 然而 super 是一个 Java 关键字.super 可以理解为是指向自己超(父)类对象的一个指针,而这个超类指的是离自己最近的一个父类.
- this()和super()都只能出现在构造方法的第一行,故this()和super()方法不能共存(因为this必然会调用其它的构造函数,其它的构造函数必然也会有 super 语句的存在),当一个类的构造方法第一行中没有this(),也没有super(),系统默认有super()方法.
- this() 和 super() 都指的是对象,所以,均不可以在 static 环境中使用.
普通的直接引用
- 可以用 super.xxx 来引用父类的成员.
代码示例
Country.java
City.java
public class Country {
String name;
void value() {
name = "China";
}
}
public class City extends Country {
String name;
public 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();
}
}
/**Output:
* Shanghai
* China
**/
引用构造函数
代码示例
Person.java
Chinese.java
public class Person {
public static void prt(String s) {
System.out.println(s);
}
//构造方法(1)
Person() {
prt("父类·无参数构造方法: "+"A Person.");
}
//构造方法(2)
Person(String name) {
prt("父类·含一个参数的构造方法: "+"A person's name is " + name);
}
}
public class Chinese extends Person {
Chinese() {
// 调用父类构造方法(1)
super();
prt("子类·调用父类无参数构造方法:"+"A chinese coder.");
}
Chinese(String name) {
// 调用父类具有相同形参的构造方法(2)
super(name);
prt("子类·调用父类含一个参数的构造方法:"+"his name is " + name);
}
Chinese(String name, int age) {
// 调用具有相同形参的构造方法(3)
this(name);
prt("子类:调用子类具有相同形参的构造方法:his age is " + age);
}
public static void main(String[] args) {
Chinese cn = new Chinese();
cn = new Chinese("CodeRay");
cn = new Chinese("CodeRay", 18);
}
}
/**Output
* 父类·无参数构造方法: A Person.
* 子类·调用父类无参数构造方法:A chinese coder.
* 父类·含一个参数的构造方法: A person's name is CodeRay
* 子类·调用父类含一个参数的构造方法:his name is CodeRay
* 父类·含一个参数的构造方法: A person's name is CodeRay
* 子类·调用父类含一个参数的构造方法:his name is CodeRay
* 子类:调用子类具有相同形参的构造方法:his age is 18
**/
在线测试
在线测试