Java類和對象及實例 收藏
1,類和對象
在面向?qū)ο蟮母拍町斨?,類(class)是既包括數(shù)據(jù)又包括作用于數(shù)據(jù)的一組操作的封裝體。類的數(shù)據(jù)稱為成員變量,類對數(shù)據(jù)的操作稱為成員方法。成員變量反映類的狀態(tài)和特征,成員方法反映類的行為和能力。類的成員變量和方法統(tǒng)稱為類的成員。
對象(Object)是類的實例(instance)。對象是動態(tài)的,擁有生命周期,都會經(jīng)歷一個從創(chuàng)建、運行到消亡的過程。對象與類的關(guān)系就像變量與數(shù)據(jù)類型一樣。
類聲明 { 修飾符 } class <Classname> { extends <Classname> } { implements <Interface1>, <Interface2>, [..], <InterfaceN> } { // 類主體 }
聲明成員變量 public class Person{ private int age;
(聲明)成員方法 [修飾符] 返回值類型 方法名([參數(shù)列表])[throws 異常類] { 語句序列; [return []] }
public class class Person{ private int age; public int getAge(){ return age; }
public void setAge(int a){ age=a; } }
聲明main方法 public static void main(String [] args)
對象聲明 Date aday;//聲明一個是Date類的aday對象
對象實例化 創(chuàng)建類的實例必須調(diào)用類的構(gòu)造方法。類的構(gòu)造方法是一類和類同名的方法,用于創(chuàng)建類的實例并初始化對象。 對象 = new 類的構(gòu)造方法([參數(shù)列表]); aday = new Date(); 當使用new創(chuàng)建了一個對象的時候,系統(tǒng)為對象中的成員變量進行了初始化,不但為變量分配了相應(yīng)的存儲單元,還為變量設(shè)置了所屬數(shù)據(jù)類型的初始值。
方法調(diào)用時的參數(shù)傳遞原則 如果形參的數(shù)據(jù)類型是基本數(shù)據(jù)類型,則實際參數(shù)向形參傳遞的是值,即傳值。 如果形參的數(shù)據(jù)類型是引用數(shù)據(jù)類型,則實際參數(shù)向形式參數(shù)傳遞的是引用。 這里隨便用個例子來說明
2,繼承,多態(tài)和封裝
(1)封裝性
聲明構(gòu)造方法 構(gòu)造方法與類同名,構(gòu)造方法返回的是該類的一個實例,不需要返回類型。 當一個類沒有構(gòu)造方法的時候,Java自動為該類生成一個默認的構(gòu)造方法,默認構(gòu)造函數(shù)沒有參數(shù)。 public class Person{ public Person(int age){ }
public Person(String name ,int age ){ } } 當一個類有了構(gòu)造函數(shù)但是不是默認構(gòu)造函數(shù)的時候,默認構(gòu)造函數(shù)將不會被提供。 也就是說:Person p=new Person();是錯誤的。
重載 一個類中如果有多個同名的但是帶有不同參數(shù)的方法列表,稱為方法的重載。
this引用和instanceof對象運算符 this可以調(diào)用成員變量和成員方法,也可以指代對象本省,也可以調(diào)用本類的構(gòu)造函數(shù)。
public class class Person{ private int age; public int getAge(){ return age; }
public void setAge(int a){ age=a; } public boolean equals(Person p1){ Person p=this; return p1.getAge()==p.getAge(); } }
instanceof對象運算符判斷一個對象是否屬于指定類及其子類,返回boolean類型。 Person p=new Person(); return p instanceof Person;//返回true
類成員訪問權(quán)限
實例成員與類成員 (類成員方法和實例成員方法) 類成員使用類名訪問,聲明類成員需要加上static,如下所示 public class Person1{ String name; static int count; }
訪問方式為:假設(shè)一個對象p Person1.count; p.name;
繼承
Java中只支持單繼承,子類不能夠繼承父類的構(gòu)造方法。但在子類當中可以使用super調(diào)用父類的構(gòu)造方法。格式為super([參數(shù)列表]) 子類可以對父類賦值兼容。 由于繼承相對而言比較簡單,所以不再贅述。
多態(tài)性
多態(tài)性有兩種 a,編譯時多態(tài)。 b,運行時多態(tài)。
方法的多態(tài)性主要有方法的重載和覆蓋。 方法的覆蓋表現(xiàn)出兩種多態(tài)性,當對象獲得本類的實例時,為編譯時多態(tài)性,否則為運行時多態(tài)性。 Person p=new Person(); Student stu=new Student();//假設(shè)Student是Person的子類,它們有同樣的print()方法。 Person p1=new Student(); p.print();//編譯時多態(tài),執(zhí)行本類方法 stu.print();//編譯時多態(tài),執(zhí)行覆蓋方法 p1.print();//運行時多態(tài),執(zhí)行Student覆蓋方法
p1聲明為父類對象但是卻獲得了子類的實例,那么它究竟執(zhí)行的是子類覆蓋方法還是父類方法呢? 這里有兩種情況,這取決于子類是否覆蓋了父類的該方法。如果子類覆蓋了該方法,就執(zhí)行子類的該方法,否則執(zhí)行父類方法。但是在編譯時,僅僅依據(jù)對象所屬的類無法確定到底該執(zhí)行哪個類的方法,只有到運行是才能呢個確定,所以是運行時多態(tài)。
這里請注意,父類對象并不能沒有被子類覆蓋的方法。
3,類和接口及抽象類內(nèi)部類
//基本類 public class Manager extends Person implements Job{
//抽象類 public abastract class Person{ String id; String name; int age; //對應(yīng)get和set方法 public abstract String goodAt();
//接口 public interface Job{ //abstract可有可無 public abastract String getJobName(); public int getSalary();
//最終類 public final class Math extends Object{ }
如上,使用關(guān)鍵字abstract聲明的類稱為抽象類,使用abstract聲明的成員方法為抽象方法,抽象類通常包含抽象方法,抽象方法是只有方法聲明而沒有方法體的成員方法。 抽象類不能被實例化。 抽象類中可以不包含抽象方法,但是包含抽象方法的類必須聲明為抽象類。抽象方法必須被子類覆蓋。 最終類不能被繼承。
接口
接口是一組常量和抽象方法的集合。在Java中接口是一種引用數(shù)據(jù)類型。接口的作用是提供方法聲明與方法實現(xiàn)分離的機制,使多個類之間表現(xiàn)出共同的行為能力。它有一下的特點。
1)接口及接口成員的訪問權(quán)限都是public。 2)接口中的成員方法都是公有的抽象的實例成員方法。 3)接口中所有的抽象方法必須被實現(xiàn)接口的類全部覆蓋。 4)接口中的成員變量都是常量。 5)接口不能被實例化。 6)接口是引用數(shù)據(jù)類型。
接口與抽象類
相同點: 兩者都包含抽象方法,都不能被實例化。 兩者都是引用數(shù)據(jù)類型,其變量可以被賦值為子類或者實現(xiàn)接口的類的對象。
不同點: 抽象類約定多個子類之間共同使用的方法;接口約定多個互不相關(guān)類之間共同使用的方法。 抽象類與子類之間采用單繼承機制;一個類實現(xiàn)了多個接口實現(xiàn)了多繼承的功能。 抽象類及其類中成員具有與普通類一樣的訪問權(quán)限;接口中的訪問權(quán)限都是public。 抽象類可以包含非抽象的方法,也可以聲明構(gòu)造方法;接口中的方法全部都是抽象方法。 抽象類可以聲明成員變量,子類可以對成員變量賦值;接口只能聲明常量。
內(nèi)部類
聲明內(nèi)部類
這里呢,我對內(nèi)部類的理解不深入,所以需要重新整理了,到此為止吧,我將整理另外一篇有關(guān)內(nèi)部類的文章。
發(fā)表于 @ 2010年10月07日 20:40:00 | 評論( 0 ) | 舉報| 收藏 舊一篇:面向?qū)ο笏枷爰昂诵?/a> | 新一篇:Jsp內(nèi)置對象
|
|