package p278;
/**
* @author QinYingjie
* @version 1.0
*/
public class p297 {
// super关键字
// super代表父类的引用,用于访问父类的属性、方法、构造器
// 使用细节:
// 1.super访问父类的属性,但不能访问父类的private属性 。
// 2.super访问父类的方法,但不能访问父类的private方法。
// 3.访问父类的构造器:super(参数列表) ,只能放在构造器的第一句,只能出现一句。
public static void main(String[] args) {
C c = new C();
c.test();
}
}
class A{
// 1.调用父类构造器的好处(分工明细,父类属性由父类初始化,子类的属性由子类初始化)
public void say()
{
System.out.println("A say ...");
}
}
class B extends A{
// 2.当子类中有和父类中成员(属性和方法)重名时,为了访问父类的成员,必须通过super,
// 如果没有重名,使用super/this/直接访问是一样的效果
// 3.super的访问不限于直接父类,如果爷爷类和本类中都有同名的成员,也可以使用super
// 去访问爷爷类的成员,如果多个基类都有同名的成员,使用super访问遵循就近原则。A>B>C
public void test()
{
super.say();
this.say();
}
public void say()
{
System.out.println("B say ...");
}
}
class C extends B{
public void test()
{
super.say();
}
}
/*
* super关键字与this关键字对比
* 区别点 this super
* 访问属性 访问本类的属性,如果本类没有此属性就从父类找 访问父类属性
* 调用方法 访问本类的方法,如果本类没有此方法就从父类找 直接访问父类中的方法
* 调用构造器 调用本类构造器,必须放在构造器的首行 调用父类构造器,必须放在子类构造器的首行
* 特殊 表示当前对象 子类访问父类对象
* */