[问题] 请问private继承的问题

楼主: minGW128 (minGW128)   2014-10-11 18:53:58
各位好,我今天想要厘清我自己对于private data/method继承的观念
所以试着打了一些小范例:
class A {
private int data = 10;
private void showData() {
System.out.println(data);
}
}
class B extends A {
}
我对private的继承观念是:class B内还是会继承class A的data与showData()
private只是限制data与showData()只能在class A内scope内使用
所以以下范例,我可以理解为什么会错
class A {
private int data = 10;
private void showData() {
System.out.println(data);
}
}
class B extends A {
}
class Main {
public static void main(String[] args) {
B b = new B();
b.showData();
// wrong, showData() can only be accessed within the scope
// of class A
}
}
错误的地方是由于b.showData()的使用地方,是在class A的scope之外
但是以下范例,我就不能理解为什么编译不过了
class A {
public static void main(String[] args) {
B b = new B();
b.showData(); // wrong! I don't know why
}
private int data = 10;
private void showData() {
System.out.println(data);
}
}
class B extends A {
}
这个范例中,b.showData()是在class A的scope中
请问为什么不行呢?是不是我对继承或是private有什么理解错误的地方?
谢谢大家!
作者: roder (尊重 q( ̄︶ ̄)p 包容)   2014-10-11 18:57:00
在执行A的时候 Class B还没有被建构出来 当然不会过
作者: cyclone350 (老子我最神)   2014-10-11 19:44:00
static method 的范围跟一般 class method 不一样
楼主: minGW128 (minGW128)   2014-10-11 19:54:00
谢谢楼上两位 我也只能这样说服我自己 否则观念很难连贯
作者: cyclone350 (老子我最神)   2014-10-11 20:10:00
就像你在 static method 没办法使用 this 一样
作者: ssccg (23)   2014-10-11 22:05:00
这跟static和先后没关系,class宣告先后没有差private不会被继承,用B的reference是不能呼叫的改成 ((A)b).showData(); 就可以不是看scope,是看reference是什么type在class A中只是隐含都用type A的this reference去呼叫
作者: cyclone350 (老子我最神)   2014-10-11 22:23:00
我知道ssccg的意思... 但是原po是问为什么在A的method里面无法用A的方法。恩... 的确跟static没关系,搞错抱歉 XD
作者: ssccg (23)   2014-10-12 00:11:00
没错还是要在class里面才能用应该说非static的member,除了scope还要看reference type

Links booklink

Contact Us: admin [ a t ] ucptt.com