super关键字

super关键字:


   因为构造方法不能被继承,所以在子类中调用父类的构造方法只能通过super关键字来实现。super可以理解为父类在


子类中的一个对象,使用super可以调用父类的属性和方法。
   super关键字是在当前类中访问或调用父类对象的成员变量或方法,可作为当前类的父类对象来使用,它访问的是父


类非private变量和调用的是父类非private方法。



语法格式:
super.varName;        //在子类中访问父类中的成员变量
super.menthodName;    //在子类中调用父类中的成员方法




1:super关键字访问父类中的成员变量和调用父类中的方法。


例子:


//定义父类
class SuperParent{

private int a = 10; //声明一个私有的变量a
public int b = 30;  //声明一个非private的变量b

//定义在父类中输出变量的方法
public void menthod(){
System.out.println("直接访问父类中的变量: a="+a+"b="+b);
}
}


//定义继承SuperParent类的子类
 class SuperChildren extends SuperParent{

//定义类中的方法
public void show(){

//访问父类中的变量b
System.out.println("在子类中访问父类的变量b的值为"+super.b);
//调用父类的方法
super.menthod();
}
}


public class TestArray{

   public static void main(String[] args) {

  SuperChildren sc = new SuperChildren();
  sc.show();
}
 
}


2:super关键字只能在构造方法或实例方法内使用,而在静态方法好热静态代码块内不能使用。
  通过super访问在子类中被隐藏的变量和调用被重写的方法



例子:
//定义父类
class SuperBase{
String str = "父类中的变量";    //声明变量str,在父类中继承后被隐藏

//定义父类中的方法print(),在子类中被重写
public void print(){
System.out.println("父类中的方法");
}
}




//定义子类
class SuperSub extends SuperBase{

String str = "子类中的变量";     //声明变量str,在子类中隐藏了父类的变量str

//定义子类中的方法
public String getstr(){
return this.str;          //访问当前类的str
}



//在子类中定义与父类同名的方法,重写父类的方法


@Override
public void print() {
System.out.println("子类中的方法");
}

//定义子类中的方法
public void SuperInfo(){
//访问父类中被隐藏的变量str
System.out.println("父类中的变量str为:"+super.str);
super.print();          //调用父类被重写的print()方法
}
}


public class TestArray{
public static void main(String[] args) {

SuperSub ss = new SuperSub();        //创建子类对象ss
System.out.println(ss.getstr());     //输出子类的变量str
ss.print();                          //调用ss对象的print()方法
ss.SuperInfo();                      //调用ss对象的superInfo()方法
}
}




3:super可以在子类的构造方法中调用直接父类的构造方法
   子类的构造方法体内使用,并且是构造方法体内的第一行语句。
   super可以调用父类的带参数和无参数的构造方法,通过super调用直接父类的构造方法

   例子:
 class SuperConstruct{
//声明变量
private String name;
private int age;

//默认无参构造方法
public SuperConstruct() {

}



//定义有参构造方法
public SuperConstruct(String name,int age){
this.name = name;
this.age = age;
System.out.println("姓名:"+name+  ",年龄:"+age);
 }
}


class SuperDemo extends SuperConstruct{
//声明变量
private String str;
//定义子类默认构造方法


public SuperDemo() {
//在第一行调用父类默认的构造方法
super();
this.str = "子类";
}


//定义子类有参数的构造方法
public SuperDemo(String name, int age) {
//调用父类有参数的构造方法
super(name, age);

}
}


public class Test{
 
public static void main(String[] args) {

SuperDemo sd = new SuperDemo("张三",25);

}

}

你可能感兴趣的:(super关键字)