private的member當然也可以繼承,只是subclass無法直接取用,但是可以透過superclass放出來的public function來控制
實驗了一下程式碼
class Parent{
static int data;
static void f(){
System.out.println("Parent");
}
}
class Children extends Parent{
}
...
public static void main(String[] args) {
Parent.data++;
Children.data++;
System.out.println(Parent.data);
Children.f();
}
//output:
2
Parent
static的成員子類別一樣可以共用
但是將程式碼改程如下呢?
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
Parent.data++;
Children c=new Children();
System.out.println(Parent.data);
System.out.println(c.data);
}
}
class Parent{
static int data;
static void f(){
System.out.println("Parent");
}
}
class Children extends Parent{
int data;
}
//output:
1
0
或是這樣
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
Parent.data++;
Children c=new Children();
System.out.println(Parent.data);
System.out.println(c.data);
}
}
class Parent{
static int data;
static void f(){
System.out.println("Parent");
}
}
class Children extends Parent{
static int data;
}
//output:
1
0
很神奇,可以跑,父類別的data被子類別的data給遮蔽了
那加上函式如何呢?
class Children extends Parent{
int data;
void f(){
System.out.println("Children");
}
}
很可惜,出現錯誤訊息
This instance method cannot override the static method from Parent
看樣子static函式沒辦法直接被實體函式遮蔽,只能被複寫
同樣的,如果父類別的函式為instance子類別同名函式也不能有static
class Children extends Parent{
int data;
static void f(){
System.out.println("Children");
}
}
這樣就可以了,閒來無事的小試驗
沒有留言:
張貼留言