Java中super的几种用法并与this的区别
1. 子类的构造函数如果要引用super的话,必须把super放在函数的首位.
class Base { Base() { System.out.println("Base"); }} public class Checket extends Base { Checket() { super();//调用父类的构造方法,一定要放在方法的首个语句 System.out.println("Checket"); } public static void main(String argv[]) { Checket c = new Checket(); }} class Country { String name; void value() { name = "China"; }} class City extends Country { String name; void value() { name = "Hefei"; super.value();//不调用此方法时,super.name返回的是父类的成员变量的值null System.out.println(name); System.out.println(super.name); } public static void main(String[] args) { City c=new City(); c.value(); }}class Country { String name="xianfan"; String value(String name) { name = "China"; return name; }} class City extends Country { String name; String value(String name) { name = "Hefei";super.value("失败");//不调用此方法时,super.name返回的是父类的成员变量的值null System.out.println(name); System.out.println(super.name); return name; } public static void main(String[] args) { City c=new City(); c.value("成功"); }} class Person { public static void prt(String s) { System.out.println(s); } Person() { prt("A Person."); } Person(String name) { prt("A person name is:" + name); }} public class Chinese extends Person { Chinese() { super(); // 调用父类构造函数(1) prt("A chinese.");// (4) } 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("kevin"); cn = new Chinese("kevin", 22); }}