public class Test
{
public static void main(String[] args)
{
A aa=new A();
aa.print();
B bb=new B();
bb.print();
}
}
class A
{
public void print()
{
print2();
System.out.println(i);
}
public void print2()
{
System.out.println("AAAA");
}
public int i=10;
}class B extends A
{
public void print2()
{
System.out.println("BBBB");
}
public int i=15;
}
此函数输出结果为:
AAAA
10
BBBB
10那么我的问题就是:当子类B的实例去调用从父类A继承来的函数print()时,print()里再去调用了在B类中覆盖的print2()和覆盖的实例域. 发现print()函数调用了类B的函数print2(),和读取类A的实例域i.为什么它不调用类A的函数print2()和读取A的实例域,或者调用类B的函数print2()和读取B的实例域呢?而是选择调用函数时调用子类的,读取实例域读取父类的?
{
public static void main(String[] args)
{
A aa=new A();
aa.print();
B bb=new B();
bb.print();
}
}
class A
{
public void print()
{
print2();
System.out.println(i);
}
public void print2()
{
System.out.println("AAAA");
}
public int i=10;
}class B extends A
{
public void print2()
{
System.out.println("BBBB");
}
public int i=15;
}
此函数输出结果为:
AAAA
10
BBBB
10那么我的问题就是:当子类B的实例去调用从父类A继承来的函数print()时,print()里再去调用了在B类中覆盖的print2()和覆盖的实例域. 发现print()函数调用了类B的函数print2(),和读取类A的实例域i.为什么它不调用类A的函数print2()和读取A的实例域,或者调用类B的函数print2()和读取B的实例域呢?而是选择调用函数时调用子类的,读取实例域读取父类的?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货