super关键字:
1.子类访问直接父类中被覆盖的数据成员。
super.数据成员名;
2.子类访问直接父类中被子类覆写的成员方法。
super.成员方法名(实参列表);
3.子类调用直接父类的构造方法。
super.(参数);
package com.zsh.java;
public class Base { //父类
//数据成员
private String baseX;
public int baseSubY;
//构造方法
public Base(){
}
public Base(String baseX,int baseSubY){
super();
this.baseX = baseX;
this.baseSubY = baseSubY;
}
//setter,getter方法
public String getBaseX() {
return baseX;
}
public void setBaseX(String BaseX) {
this.baseX = BaseX;
}
public int getBaseSubY() {
return baseSubY;
}
public void setBaseSubY(int baseSubY) {
this.baseSubY = baseSubY;
}
public String getBase(){ //获得Base数据成员
return "BaseX:"+this.baseX+",baseSubY"+this.baseSubY;
}
public void printInfo(){ //输出父类数据成员
System.out.println("父类方法,父类中的baseSubY:" + this.baseSubY);
}
public void printMSG(String str){ //输出父类成员方法
System.out.println("父类中的printMSG方法:" + str);
}
}
package com.zsh.java;
public class Sub extends Base{ //子类
//数据成员
public int baseSubY = 2; //覆盖父类同名数据成员
//构造方法
public Sub(){
}
public Sub(String baseX, int baseSubY) {
super(baseX, baseSubY); //调用父类构造方法
}
//settet和getter方法
@Override
public int getBaseSubY() {
return baseSubY;
}
@Override
public void setBaseSubY(int baseSubY) {
this.baseSubY = baseSubY;
}
//功能方法
public String getSub(){ //获得数据成员信息
return super.getBase();//调用父类成员方法
}
public void printBaseSubY(){
//super关键字引用父类数据成员
System.out.println("baseSubY in base:" + super.baseSubY);
//this关键字引用当前对象的数据成员
System.out.println("baseSubY in sub:" + this.baseSubY);
}
public void printInfo(){ //覆盖父类的成员方法
System.out.println("子类的方法,子类的baseSubY:" + this.baseSubY);
}
public void test(){
super.printInfo();//super调用父类的成员方法
this.printInfo();//this调用子类的成员方法
}
public void printMSG(String str,int x){//重载父类的成员方法
System.out.println("子类中的printMSG方法:" + str + "," + x);
}
}
package com.zsh;
import com.zsh.java.Sub;
public class Demo008 {
public static void main(String[] args) {
Sub sub = new Sub("x",1);
sub.printBaseSubY();
System.out.println(sub.baseSubY);
sub.test();
sub.printMSG("古代文明");//父类的方法
sub.printMSG("现代文明",1949);//子类的方法
}
}
结果展示: