package com.itheima;
class Super
{
//当我注释掉这行代码时,用多态父类引用创建子类匿名对象还是能调用show方法,还是能输出子类的 x 变量值?
//楼主 这里还是一样,编译看的是左边,show方法调用时要访问 x 如果父类中没有 x 就会报错
int x = 4;
//当我注释方法时,编译还是会失败,这说明匿名内部类还是具备多态的特性呀?为什么成员变量就不具备多态特性呢?
//注释点此方法 编译失败,是因为,下面你重写此方法的原因造成的, 关于这句没有看懂你想说什么意思 为什么成员变量就不具备多态特性呢?
void show()
{
}
}
class heima extends Super
{
static int x = 9;
public static void main(String[] args)
{
int x = 8;
Super s = new Super()
{
int x = 6;
void show()
{
System.out.println(x);
}
};
//下面函数的输出层级关系是:6(匿名子类对象中的变量)--4(父类中的变量)--8(主函数中的变量)--9(类中的静态变量)
s.show();
//------------------------------------------------------------------------
//这个地方是 编译看左边,也就是父类,如果父类没有show方法报错, 运行看右边 执行原则是就近原则 所以是6
//-----------------------------------------------------------------------------
//当我注释掉父类中的成员变量 x 时,编译失败;而匿名内部类还是能正常运行;
towDemo();
}
public static void towDemo()
{
int x = 5;
//父类引用指向子类对象时,只能调用父类中的成员,不可以调用子类中特有的成员;
Super s1 = new heima();
//输出的结果为父类中的变量 x = 4;
//------------------------------------------
//这个地方你注意,当时成员变量时,编译看左边,运行也是看左边,所以他访问的是父类的成员变量
//-----------------------------------
System.out.println(s1.x);
}
} |