class A
{
public int i = 10;
}class B extends A
{
public int i = 8; //编译无错误,请问到底B类中现在有几个i,如果是子类覆盖了A类的i,哪我们怎样在B的方法show中访问A中的i
void show()
{
System.out.println("B类中的show方法被调用了, i = " + i);
}
}class M
{
public static void main(String[] args)
{
new B().show(); System.out.printf("拉拉! 2008年10月29日11:26:35");
}
}
/*
在JDK 1.6中的运行结果是:
--------------------------
B类中的show方法被调用了, i = 8
拉拉! 2008年10月29日11:26:35
--------------------------
*/
{
public int i = 10;
}class B extends A
{
public int i = 8; //编译无错误,请问到底B类中现在有几个i,如果是子类覆盖了A类的i,哪我们怎样在B的方法show中访问A中的i
void show()
{
System.out.println("B类中的show方法被调用了, i = " + i);
}
}class M
{
public static void main(String[] args)
{
new B().show(); System.out.printf("拉拉! 2008年10月29日11:26:35");
}
}
/*
在JDK 1.6中的运行结果是:
--------------------------
B类中的show方法被调用了, i = 8
拉拉! 2008年10月29日11:26:35
--------------------------
*/
如:
class A
{
public int i= 10;
}class B
{
public int i= 8;
}class C
{
public int i= 6; void show()
{
//我既想访问C自身的i,又想访问B中的i, 还想访问A中的i,代码该如何写?????????????
}
}
C必须要有A类和B类的对象才能访问他们的i
要不然就把A类和B类中的i改成静态的,那么就可以
使用A.i和B.i来访问了
new C().i ;
new B().i ;
new A().i ;这就分别访问了
加一点:子类与父类的属性可同名,而且可以改变子类的访问权限,但子类的属性的权限不能高于父类的。也就是如果父类是public int i;在子类就可以定义成:private int i;反之是不可以的。
class A
{
public int i= 10;
} class B extends A
{
public int i= 8;
} class C extends B
{
public int i= 6; void show()
{
//我既想访问C自身的i,又想访问B中的i, 还想访问A中的i,代码该如何写?????????????
}
}
class A
{
public int i= 10;
} class B extends A
{
public int i= 8;
} class C extends B
{
public int i= 6;
void show()
{
System.out.println(i);
System.out.println(super.i);
System.out.println(new A().i);
} }
public class test{
public static void main(String args[]){
new C().show();
}
}
System.out.println(i);
System.out.println(super.i);
System.out.println(new A().i);
对啊,这3行应该就可以实现了吧?我觉得可以,可惜公司没有环境试
在子类中可以用super.访问父类对子类开放的属性和方法
如果子类没有定义与父类中同名的属性,并且子类可以访问父类的这个属性,那么直接用属性名就可调用
如果子类定义与父类同名的属性,而且子类可以访问父类的这个属性,那么用super.调用
如果子类定义了与父类的属性,但子类不对父类的这个属性有访问属性,那么用super.也无法调用
A中的访问不了了。只能访问B 中的用super
对于方法倒是有类似的限制:如果父类的方法为public的,子类不可以定义成private,但反之可以。
{
private int i= 10;
} class BB extends AA
{
private int i= 8;
} class CC extends BB
{
private int i = 6;
}public class Test {
public Test() {
}
public static void main(String[] args) throws Exception{
CC o = new CC();
Class c = o.getClass();
Class b = c.getSuperclass();
Class a = b.getSuperclass();
Field ci = c.getDeclaredField("i");
Field bi = b.getDeclaredField("i");
Field ai = a.getDeclaredField("i");
ci.setAccessible(true);
bi.setAccessible(true);
ai.setAccessible(true);
System.out.println(ci.getInt(o));
System.out.println(bi.getInt(o));
System.out.println(ai.getInt(o));
}
}
this表示当前类的实例,当然子类的实例是可以调用父类的属性地。