+ -
当前位置:首页 → 问答吧 → private的继承关系问题

private的继承关系问题

时间:2011-09-26

来源:互联网

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class A{
  public A()
  {
    System.out.println("A");
  }
  private void AB()
  {
    System.out.println("private");
  }
  public static void main(String args[])
  {
    System.out.println("E");
     A p=new P_211();
     p.AB();
  }
}
public class P_211 extends A{
  
  public P_211(){
    System.out.println("C");
  }  
}

这种情况下,可以呼叫p.AB()是因为虽然AB()函式为private,但P_211继承A所以也将prvate继承下来,只是P_211无法对prvate进行存取,因此在A类别中以子类别P_211来产生p物件时,p才能够呼叫AB()函式吗?否则,照理说AB()为private,P_211应该是看不到该方法,但p物件是以P_211来产生的却能够呼叫AB()函式就很奇怪了,所以AB()函式虽然是private但他还是可以被子类别继承,但无法被子类别所使用而已吗?

作者: fann0731   发布时间: 2011-09-26

经验+测试告诉我,private是针对呼叫的对象类别,而非物件

作者: ddtet   发布时间: 2011-09-26

我想你是误会我的意思了,这个问题其实包含了多型的概念再,
首先p是以子类别P_211产生实体,那么从多型的概念来看P_211里没有AB()这个函式,那么照理说p物件事不能去呼叫AB()这个函式的,除非P_211这个子类别有继承父类别的AB()函式(但因为是private所以子类别看不到也不能存取,但这个函式在子类别是存在的),因此以父类别A为物件型别的p物件才能够呼叫AB()函式

作者: fann0731   发布时间: 2011-09-26

照你的说法…下面的程式应该可以被编译,但是实际上是不行的…
希望你能看懂我要描述的东西,再不行我也没办法了…
1
2
3
4
5
6
7
class B{ public static void main(String args[]) { A p=new P_211(); p.AB(); }
}


总觉得你似乎没抓到我要说明的重点,和另一篇文章一样…
也许我文笔真的有待加强,看有没有其它人有其它说明方式,我也想看看

作者: ddtet   发布时间: 2011-09-26

热门下载

更多