上面题目发错了 应该是
class A
{
private void outa()
{
System.out.println("in a1");
}
public void outb()
{
System.out.println("in b1");
}
public void printall()
{
outa();
outb();
}
}
class B extends A
{
public void outa()
{
System.out.println("in a2");
}
public void outb()
{
System.out.println("in b2");
}
}
public class test
{
public static void main(String args[])
{
B b=new B();
b.printall();
}
}
为什么b.printall调用的后打出a1,b2
class A
{
private void outa()
{
System.out.println("in a1");
}
public void outb()
{
System.out.println("in b1");
}
public void printall()
{
outa();
outb();
}
}
class B extends A
{
public void outa()
{
System.out.println("in a2");
}
public void outb()
{
System.out.println("in b2");
}
}
public class test
{
public static void main(String args[])
{
B b=new B();
b.printall();
}
}
为什么b.printall调用的后打出a1,b2
解决方案 »
- 循环求值问题
- 求高效代码
- 关于final类String的问题,望得到高人指点
- 用java 读取硬盘的序列号
- 请问这样写有什么问题?运行时老告诉我:所需项目中存在错误
- 如何在jtable 绑定 JTextfield 实现动态同步更新
- 数据库连接
- 真是很累,Optimizeit 5.5找了半天才只有code coverage 1.4的keygen
- jni的dll中调用了其他的C++ dll,如何设置路径
- 怎么样解决在JBuilder5中用JBuilder的类DataBase和QueryDataSet中连Sybase数据库时无法显示中文的问题
- 请问,java表达式有类型,怎么理解????
- 程序哪里出问题了, 帮忙看一下
运行时对象b的方法列表为outa();outb();printall();
因为私有函数和对象不能被继承和覆盖
所以只有outb()覆盖了父类的outb()
而父类的printall()没有被覆盖,而他调用的outa()属于父类的私有函数
所以,这个私有函数不能被对象b中的outa()替换
只有在b中重载printall()如下public void printall()
{
outa();
outb();
}
才能调用b类中的outa()方法