只支援單繼承、即乙個子類只能繼承乙個父類
child extends parents
重寫父類
重寫時不能降低方法的修飾許可權範圍,父類的protected可以改為public ,但不能private
parents a=new child();
//父類宣告,子類實現
child a=new parents();//這是錯誤的
super關鍵字
super.property;//呼叫父類屬性
super.method();//呼叫父類的方法
getclass()
返回物件執行時的class例項,getname取得類的名稱
system.out.println(b.getclass().getname());
=>xiaoxiong1.computer2
system.out.println(b.getclass());
=>class xiaoxiong1.computer2
system.out.println(new computer2());
=>xiaoxiong1.computer2@15db9742
引數個數不同、引數型別不同、引數順序不同
return (int) (a+b);
//輸出為int型
向上轉型:
將子類物件看作是父類物件
向下轉型:
將父類物件賦予子類物件,並強制轉換為子型別
parents a=new child();
child b=(child) a;
當在程式中執行向下轉型操作時,如果父類物件不是子類物件的例項,就會發生class否為castexception異常,所以在執行向下轉型之前需要養成個良好的習慣, 就是判斷父類物件是否為子類物件的例項。這個判斷通常使用instanceof操作符來完成
用它來判斷個例項物件是否屬於乙個類。
if (q instanceof square)
abstract關鍵字構造方法不能定義為抽象方法
public abstract class market
public class taobaomarket extends market
}
inte***ce關鍵字
inte***ce drawtest
乙個類實現乙個介面用implements關鍵字
class parallelogramgleuseinte***ce implements drawtest
}
class me implements ifather,imother;
//多個介面物件,用,隔開
介面中的方法都是抽象的,因此,當子類實現介面時,必須實現介面中的所有方法
多重繼承
如果是介面繼承介面,使用extends關鍵字
inte***ce intf1
inte***ce intf2 extends intf1
public class intf3 implements intf2
public void b()
}
(1)子類只能繼承乙個抽象類,但可以實現任意多個介面。
(2)乙個類要實現乙個介面必須實現介面中的所有方法,而抽象類不必。
(3)抽象類中的成員變數可以是各種型別,而介面中的成員變數只能是public static final的(4)介面中只能定義抽象方法,而抽象類中可以定義非抽象方法。
(5)抽象類中可以有靜態方法和靜態**塊等,介面中不可以。
(6)介面不能被例項化,沒有構造方法,但抽象類可以有構造方法。
不使用public修飾符設定類的許可權,則預設為default(預設)修飾,本類、本類所在包可見;其他包中的子類、其他包中的非子類不可見
import xiaoxiong.*; //指定包中所有類在程式中可使用
import xiaoxiong.math //指定包中math類在程式中可使用
不能被繼承、不能改動、不能覆蓋
final double pi=3.14;
也不是恆定不變
private static random rand = new random();
private final int a1 = rand.nextint(10);
//每次執行隨機產生0~10之間的隨機數賦予定義為final的a1
private static final int a2 = rand.nextint(10);
//static 不變化
通常使用public static final修飾,這樣的常量只能在定義時被賦值
public class outclass
}
內部類可以使用外部類的成員
外部類不可以直接訪問內部成員變數
非內部類不能被宣告為private或protected訪問型別
使用this關鍵字獲取內部類與外部類的引用
public class thesamename
}}
inte***ce outinte***ce2
class outerclass3
} return new innerclass2("doit");
}}
return new a();
inte***ce outinte***ce2
class outerclass4
};}}
(1)匿名類沒有構造方法;
(2)匿名類不能定義靜態的成員;
(3)匿名類不能用private. public. protected、 static. final. abstact 等修飾;
(4)只可以建立乙個匿名類例項。
不能使用外部類的非靜態成員,如果建立靜態內部類的物件,不需要建立其外部類的物件
public class staticinnerclass
public static void main(string args)
}}
public class outputinnerclass extends classa.classb
}class classa
}
在某個類繼承內部類時,必須硬性給予這個類乙個帶 多數的構造方法,並且該構造方法的引數必須是該內部類的外部類引用,就像例子中的classa a,同時在構造方法體中使用a。super()語句。 java物件導向核心技術
1 內部類 內部類可以節省編譯後的位元組碼,class檔案的大小,而在實現監聽的時候,採用內部類很容易實現,但使用內部類會導致結構不清晰。1 成員變數內部類 public class out private int i 0 private void g private class inner voi...
後台開發核心技術02物件導向C
簡介 本文章主要從物件導向程式設計的三大特點來敘述 封裝 繼承 多型 1 struct 和 class 在c 中唯一的區別就是預設的訪問許可權不同,struct預設訪問許可權是public的,而class是private的 2 乙個類中如果定義了全是預設引數的建構函式,那麼就不能再定義過載函式了。二...
PHP核心技術筆記(2) 物件導向的設計原則
物件導向設計的五大原則分別是單一職責原則 介面隔離原則 開放 封閉原則 替換原則 依賴倒置原則。單一職責有兩個含義 乙個是避免相同的職責分散到不同的累中,另乙個是避免乙個類承擔太多職責。為什麼遵守srp 可以減少類之間的耦合,提高類的復用性。srp在實際 中的應用 工廠模式 factory 根據不同...