Java中super的用法并与this的区别(转载)
一.子类中如果需要调用父类中的构造函数,则需要使用super(),且必须在构造函数中的第一行
public class Demo1 { public static void main(String[] args) { Sub sub=new Sub(); } } class Base { public Base() { System.out.println("Base"); } } class Sub extends Base { public Sub() { //调用父类的构造方法,必须为第一行 super(); System.out.println("Sub"); } }
运行结果:
Base
Sub
二.用super访问父类中被隐藏的成员变量或方法
有时会遇到子类中的成员变量或方法与父类中的成员变量或方法同名。因为子类中的成员变量或方法名优先级高,所以子类中的同名成员变量或方法就隐藏了父类的成员变量或方法,但是我们如果想要使用父类中的这个成员变量或方法,就需要用到super.
public class Demo2 { public static void main(String[] args) { City city=new City(); city.setName(); } } class Country { String name; void setName() { name="China"; } } class City extends Country { String name; void setName() { name="nanjing"; //调用父类的成员方法 super.setName(); System.out.println(name); //调用父类的成员变量 System.out.println(super.name); } }
运行结果:
nanjing
China
三.用super直接传递参数
public class Demo3 { public static void main(String[] args) { Chinese ch=new Chinese(); ch=new Chinese("小明"); ch=new Chinese("小花",22); } } class Person { //静态方法 public static void show(String s) { System.out.println(s); } public Person() { show("A Person"); } public Person(String name) { show("A person name is: "+name); } } class Chinese extends Person { public Chinese() { //调用父类的构造方法 super(); show("A chinese"); } public Chinese(String name) { //调用父类具有相同形参的构造方法 super(name); show("his name is:" +name); } public Chinese(String name, int age) { //调用本类具有相同形参的构造方法 this(name); show("his age is:"+age); } }
运行结果:
A Person
A chinese
A person name is: 小明
his name is:小明
A person name is: 小花
his name is:小花
his age is:22
四.super与this的异同
注:本文转载自http://blog.csdn.net/anmei2010/article/details/4093118