private有什么奥秘吗?

yin986 2007-04-10 09:01:20
class A
{
public A()
{
b();
}
private void b()
{
System.out.println("A");
}
}
class A1 extends A
{
public A1()
{
super();
b();
}
private void b()
{
System.out.println("A1");
}
}
class A2
{
public static void main(String [] args)
{
A1 a1=new A1();
}
}

class A
{
public A()
{
b();
}
void b()
{
System.out.println("A");
}
}
class A1 extends A
{
public A1()
{
super();
b();
}
void b()
{
System.out.println("A1");
}
}
class A2
{
public static void main(String [] args)
{
A1 a1=new A1();
}
}
的区别就在于有没有private 修饰,结果就大不一样,这是为什么啊?
...全文
219 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
HardUp 2007-04-10
  • 打赏
  • 举报
回复
因为第二个程序里的A1继承了A,而且b()是包属性的方法,重写了父类的方法。当父类的引用指向子类时,调用的是子类的方法,即super()调用b()时由于多态调用的是A1里的b()。
在第一个程序里,b()是私有的,所以不是多态,所以super()里调用的是A里的b()。
zzxiaoma 2007-04-10
  • 打赏
  • 举报
回复
private是只有类本身能够访问,其他类不能访问
不加private继承类可以访问
晨星 2007-04-10
  • 打赏
  • 举报
回复
第二个程序中,b并不是private啊。
家有萌宝V 2007-04-10
  • 打赏
  • 举报
回复
父类的 private成员(包括成员函数和成员变量)不能被子类继承!
canedy 2007-04-10
  • 打赏
  • 举报
回复
super()调用的是父类的方法
yin986 2007-04-10
  • 打赏
  • 举报
回复
哦谢谢啊,那能给解释一下,第二个程序里的super()为什么调用的是A1里的b()呢?
likgui 2007-04-10
  • 打赏
  • 举报
回复
private方法、属性只能在类内使用!
Dan1980 2007-04-10
  • 打赏
  • 举报
回复
private方法不能被继承及覆盖,因此不能构成多态。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧