继承中,如果想访问父类中的成员,可以使用super关键字,与this的用法很相似
但是有一点不同
this可以指代对象,super不能指代对象,super代表着父类空间。
class A
{
int num = 12;
}
class B extends A
{
int num = 13;
public void show()
{
System.out.println(this.num+" "+super.num);
}
}
public class Test
{
public static void main(String[] args)
{
B b = new B();
b.show();
}
}
运行结果是
13 12
在子类函数中想要使用父类成员需要使用关键字super
class A
{
int num = 12;
public void show()
{
System.out.println(num);
}
}
class B extends A
{
int num = 13;
public void show()
{
System.out.println(num);
}
}
public class Test
{
public static void main(String[] args)
{
B b = new B();
b.show();
}
}
运行结果是 13
我们说如果子类与父类有相同的函数,那么子类的函数就会将父类的函数覆盖掉。
在这里我们要区分重载与覆盖的区别
重载(overload):
是一个类中,如果函数名相同,函数列表不同的几个函数就是重载
覆盖(override):
几个存在子父类关系的几个类中,返回值类型,函数名一样,函数列表一致的函数叫做覆盖
注:
1.重载是不看返回值类型的,覆盖要求返回值类型都要一致。
2.子类方法覆盖父类方法时,子类方法的权限必须大于等于父类方法的权限。(往下继承的子类想要使用覆盖,权限不能减)
如图所示:-->
3.静态只能覆盖静态,或者被静态覆盖。