一、super限定
super限定:与this引用非常相似,super用于限定访问父类定义的实例变量或实例方法。
- super.父类定义的实例变量
- super.父类定义的实例方法(形参)
class Base
{
int age = 20;
public void foo(String name)
{
System.out.println("执行foo方法,传入参数为:"+name);
}
}
class Sub extends Base
{
int age = 200;
@override
public void foo(String name)
{
System.out.println("执行子类重写foo方法,传入参数为:"+name);
}
public void test()
{
int age = 2; //局部变量
System.out.println(age); //2
System.out.println(this.age); //200
//super限定访问父类中的实例变量
System.out.println(super.age); //20
foo("aa");//执行子类重写foo方法,传入参数为:aa
//super限定访问父类中的实例方法
super.foo("aa");//执行foo方法,传入参数为:aa
}
}
public class
{
public static void main(String[] args)
{
Sub s = new Sub();
s.test();
}
}
二、super调用
- 子类构造器必须调用一次父类的构造器:有且仅有一次
(1) 如果子类构造器没有显示调用父类构造器,系统会自动在子类构造器的第一行先调用父类无参数的构造器。
(2)子类构造器的第一行显式使用super调用来调用父类构造器。
super限定:super后紧跟一个.
super调用:super后紧跟(参数)
- super调用和this调用:
–super调用一定是调用父类的构造器。只能出现在构造器的第一行。
–this调用是调用当前类的构造器。只能出现在构造器的第一行。
–super调用和this调用不能同时出现
☆☆☆如果父类没有无参的构造器,子类的构造器必须显式调用(super调用)父类指定的构造器。
class Fruit
{
private double weight;
public Fruit(double weight)
{
this.weight = weight;
}
}
public class Apple extends Fruit
{
public Apple
{
//如果没有super调用,默认调用父类无参数的构造器
//super("aa");//尝试调用(String)构造器
super(0.0);//尝试调用(double)构造器
}
}