程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> JAVA基礎培訓(11),方法的Override

JAVA基礎培訓(11),方法的Override

編輯:關於JAVA

Override, 主要是因為父類的功能無法滿足需求,我們又不能直接修改父類的情況下 ,我們通過子類重寫,來實現新的功能。

package Lession11;
import java.util.ArrayList;
import java.util.List;
/**
* 老紫竹JAVA基礎培訓(11),方法的Override.<br>
*
*
* @author 老紫竹 JAVA世紀網(java2000.net)
*
*/
public class Lession11 {
 public static void main(String[] args) {
  // 單純基類的測試
  Base b1 = new Base();
  b1.test();
  b1.test("");
  b1.test(new Object());
  System.out.println();
  // 單純子類的測試
  Sub s1 = new Sub();
  s1.test();
  s1.test("");
  // 靜態方法調用,會根據變量的類型,而不是對象的類型
  s1.test(new Object());
  // 上面的代碼等同於這個
  Sub.test(new Object());
  System.out.println();
  // 基類的變量,子類的實例的測試
  Base b2 = new Sub();
  b2.test();
  b2.test("");
  // 靜態方法調用,會根據變量的類型,而不是對象的類型
  b2.test(new Object());
  // 上面的代碼等同於這個
  Base.test(new Object());
 }
}
class Base {
 public void test() {
  System.out.println("Base.test()");
 }
 public Base test(String name) {
  System.out.println("Base.test(String)");
  return this;
 }
 public final void test(int age) {
  System.out.println("final Base.test(int)");
 }
 // 靜態方法屬於類,不屬於實例,所以不存在override問題
 public static void test(Object obj) {
  System.out.println("static Base.test(Object)");
 }
}
class Sub extends Base {
 // 標准的覆蓋方法
 public void test() {
  System.out.println("Sub.test()");
 }
 // JDK5開始的覆蓋方法
 // 允許返回類型和父類不同,但必須是其子類或者實現類
 public Sub test(String name) {
  System.out.println("Sub.test()");
  return this;
 }
 // 靜態方法屬於類,不屬於實例,所以不存在override問題
 public static void test(Object obj) {
  System.out.println("static Sub.test(Object)");
 }
}

測試:

1 自行增加多個參數的覆蓋使用,並測試運行結果

2 測試修改返回類型,比如

public String test()

看看編譯結果,熟悉錯誤信息。

總結:

1 覆蓋要求參數類型順序必須和父類相同

2 從JDK5開始,允許返回類型和父類不同,但必須是其子類或者實現類(對於接口)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved