子父类出现后,类成员的特点
1,变量
如果子类中出现非私有的同名成员变量时,
子类要访问本类中的变量,用this。 this代表的是本类对象的引用。
子类要访问父类中的同名变量,用super。 super代表的是父类对象的引用。
class Fu
{
private int num = 4;
public void setNum(int num)
{
this.num =num;
}
public int getNum()
{
return this.num;
}
}
class Zi extends Fu
{
int num = 5;
void show()
{
System.out.println(this.num);
System.out.println(super.num);
}
}
class ExtendsDemo
{
public static void main(String[] args)
{
Zi z = new Zi();
z.show();
}
}
输出结果是:5 4。 Zi()类中this.num引用的是本类中的num=4,因为this代表的是本类对象的引用;super.numF引用的是Fu()类中的num=5,因为super代表的是父类对象的引用。
2,子父类中的函数。
当子类出现和父类一模一样的函数时,子类对象调用该函数,会运行子类函数的内容,这种情况是函数的另一个特性:重写(覆盖)。
覆盖:
1,子类覆盖父类,必须保证子类权限大于等于父类权限,才可以覆盖,否则编译失败。
2,静态只能覆盖静态。
class Fu
{
void show()
{
System.out.println("fu show");
}
void speak()
{
System.out.println("vb");
}
}
class Zi extends Fu
{
void show()
{
System.out.println("zi show");
}
void speak()
{
System.out.println("java");
}
}
class ExtendsDemo3
{
public static void main(String[] args)
{
Zi z = new Zi();
z.speak();
}
}
输出结果是:java zi show
3,子父类中的构造函数。
在对子类对象进行初始化时,父类的构造函数也会运行,那是因为子类的构造函数默认第一行有一条隐式的语句 super();super()会访问父类中空参数的构造函数。而且子类中所有的构造函数默认第一行都是super()。所以子类在对象初始化时,要先访问一下父类中的构造函数。
class Fu
{
Fu()
{
System.out.println("fu run");
}
}
class Zi extends Fu
{
Zi()
{
System.out.println("zi run");
}
}
class ExtendsDemo4
{
public static void main(String[] args)
{
Zi z = new Zi();
System.out.println(z.num);
}
}
输出结果是:fu run zi run |
|