1. 程式人生 > >JAVA中父類,子類,內部類

JAVA中父類,子類,內部類

一個.java原始檔中可以有多個類(不包含內部類),但是隻有一個類是Public的,如

public class Test {
 public class A{//內部類
 }
 public class B{//內部類
 }
// /**
//  * @param args
//  */
 public static void main(String[] args) {

 }
}
class C{
 
}
class D{
 
}

父類,子類

比如你現在你有一個iphone4和一個iphone5的JavaBean,它們都屬於手機,都有型號,廠商等變數,如果他們都繼承了同一個父類,那個父類把他們共同的方法和變數都寫好了,比如廠商,那麼這兩個子類就不用寫廠商了,只要寫他們不同的,比如型號等就好了

父類

public class Father {
 public String num;
 void print(){}
}

子類

public class Son extends Father{
 void print(){
  System.out.println("子類中!");
 }
 void show(){
  System.out.println("show()中!");
 }
}

測試類

public static void main(String[] args) {
  Father obj = new Son();
  obj.print();
  obj.show();//這句呼叫會報錯
 }

1如果想實現多型,那麼必須要有三個條件:父類引用,子類物件,方法覆蓋,如果父類(Father)中有一個show()方法,形成方法覆蓋,那麼此時就可以obj.show(),此時形成了多型

2,沒有方法覆蓋,那麼這裡只能解釋為父類引用去訪問一個子類的方法,當然,父類引用沒有這麼大範圍的許可權,因此就會報錯

多型實際上是一種機制,在編譯的時候會生成一張虛擬的表,來記錄所有覆蓋的方法,當然,沒有被覆蓋的方法是不會被記錄在這張表上的,那麼當父類的引用去呼叫了沒有被覆蓋的子類的方法,那麼是不符合該表的,編譯的時候就會報錯,在執行程式的時候,虛擬機器會在這張虛擬的表中找覆蓋的方法,比如引用中實際上存的是一個子類物件的引用,那麼就會去找子類中相應的覆蓋的方法來執行定義一個父類型別的引用指向一個子類的物件既可以使用子類強大的功能,又可以抽取父類的共性

所以,父類型別的引用可能呼叫父類中定義的所有的方法和屬性,而對子類中定義而父類中沒有的方法是無可奈何的