封裝?
- /**?
- ?*?所謂封裝,就是將對象具有的成員變量和成員函數包裝和隱藏起來,讓外界無法直接使用,?
- ?*?被封裝的成員只能通過某些特定的方式才能訪問。??
- ?*?實現封裝有兩個步驟:?
- ?*???1、將不能暴露的成員隱藏起來,我們就不能讓其在類的外部被直接訪問或賦值。?
- ?*??????實現方法是將該成員定義為私有的,在成員定義前加上private訪問權限修飾符。?
- ?*???2、用公共方法來暴露對該隱藏成員的訪問,可以給成員加上public修飾符,將該成員定義為公共的?
- ?*/??
- package?com.study.feature;??
- ??
- /**????
- ?*??
- ?*?@className?:Package???
- ?*?@package?:?com.study.feature??
- ?*?@Description?:封裝性的測試????
- ?*?@author:lgf????
- ?*?@date?:2012?三月?12??10:20:35???????????
- ?*?@version?:?1.0?
- ?*/??
- public?class?Package?{??
- ????//?使用private隱藏??
- ????private?String?strValue;??
- ??
- ????//?通過get和set進行訪問??
- ????public?String?getStrValue()?{??
- ????????return?this.strValue;??
- ????}??
- ????public?void?setStrValue(String?strValue)?{??
- ????????this.strValue?=?strValue;??
- ????}??
- }??
繼承?
父類 ExtendsFather.java?
- /**?
- ?*?繼承是一種聯結類的層次模型,并且允許和鼓勵類的重用,它提供了一種明確表述共性的方法。?
- ?*?對象的一個新類可以從現有的類中派生。?
- ?*?1.?為什么要使用繼承??
- ?*??a.提高程序的擴展性。?
- ????b.提高了代碼的重用性。?
- ?????
- ???2.?子類能繼承到父類的那些方法和屬性?
- ????第一種:所有的屬性和方法都被子類繼承到了。?
- ????第二種:?
- ????a、子類和父類在同一個包下:?
- ????公有的受保護的屬性和方法被子類繼承到了。?
- ????b、子類和父類不在同一個包下:?
- ????公有的方法和屬性被子類繼承到了。?
- ?????
- ???3.?子類的對象能調用父類的那些方法和屬性??
- ????a、子類和父類在同一個包下:?
- ????公有的受保護的屬性和方法能被子類調用。?
- ????b、子類和父類不在同一個包下:?
- ????公有的方法和屬性能被子類調用。?
- ????在類和抽象類中,默認的就是受保護的。?
- ????在接口中,默認的就是公有的。?
- ?*/??
- package?com.study.feature;??
- ??
- /**????
- ?*?父類?
- ?*?@className?:ExtendsFather???
- ?*?@package?:?com.study.feature??
- ?*?@Description?:繼承測試????
- ?*?@author:lgf????
- ?*?@date?:2012?三月?12??10:33:02???????????
- ?*?@version?:?1.0?
- ?*/??
- public?class?ExtendsFather?{??
- ????//?定義不同四種修飾符的屬性??
- ????private?????String?privateValue;??
- ????protected???String?protectedValue;??
- ????????????????String?defaultValue;??
- ????public??????String?publicValue;??
- ??????
- ????//?定義不同四種修飾符的方法??
- ????private?void?privateFunction(){??
- ????????System.out.println("privateFunction");??
- ????}??
- ??????
- ????protected?void?protectedFunction(){??
- ????????System.out.println("protectedFunction");??
- ????}??
- ??????
- ????void?defaultFunction(){??
- ????????System.out.println("defaultFunction");??
- ????}??
- ??????
- ????public?void?publicFunction(){??
- ????????System.out.println("publicFunction");??
- ????}??
- }??
同包下的子類 ExtendsChildrenSamePackage.java?
- package?com.study.feature;??
- /**?
- *??
- *??
- *?@className?:ExtendsChildrenSamePackage???
- *?@package?:?com.study.feature??
- *?@Description?:?同一個包下面的繼承關系????
- *?@author:lgf????
- *?@date?:2012?三月?12??10:51:23???????????
- *?@version?:?1.0?
- ?*/??
- public?class?ExtendsChildrenSamePackage?extends?ExtendsFather{??
- ????public?static?void?main(String[]?args)?{??
- ????????ExtendsFather?children?=?new?ExtendsChildrenSamePackage();??
- ????????//children.privateValue?=?"no";?無法訪問到??
- ????????children.defaultValue?=?"ok";??
- ????????children.protectedValue?=?"ok";??
- ????????children.publicValue?=?"ok";??
- ??????????
- ????????//除了private修飾的方法,其他都繼承到了??
- ????????//children.privateFunction();??
- ????????children.defaultFunction();??
- ????????children.protectedFunction();??
- ????????children.publicFunction();??
- ????}??
- }??
不同包下的子類 ExtendsChildrenOtherPackage.java?
- /**?
- ?*??
- ?*/??
- package?com.study.featureSecond;??
- import?com.study.feature.ExtendsFather;??
- ??
- /**????
- ?*??
- ?*?@className?:ExtendsChildrenOtherPackage???
- ?*?@package?:?com.study.featureSecond??
- ?*?@Description?:不同包下面的繼承關系????
- ?*?@author:lgf????
- ?*?@date?:2012?三月?12??10:50:47???????????
- ?*?@version?:?1.0?
- ?*/??
- public?class?ExtendsChildrenOtherPackage?extends?ExtendsFather{??
- ????public?static?void?main(String[]?args)?{??
- ????????ExtendsFather?children?=?new?ExtendsChildrenOtherPackage();??
- ????????//children.privateValue?=?"no";?無法訪問到??
- ????????//children.defaultValue?=?"no";?無法訪問到??
- ????????//children.protectedValue?=?"no";?無法訪問到??
- ????????children.publicValue=?"ok";??
- ??????????
- ????????//除了public修飾的方法,其他都未繼承到了??
- ????????//children.privateFunction();??
- ????????//children.defaultFunction();??
- ????????//children.protectedFunction();??
- ????????children.publicFunction();??
- ????}??
- }??
重載和重寫 ExtendsOverRideLoad.java?
- /**?
- ?*??
- ?*/??
- package?com.study.feature;??
- ??
- /**????
- ?*??
- ?*?@className?:ExtendsClass???
- ?*?@package?:?com.study.feature??
- ?*?@Description?:重載和重寫????
- ?*?@author:lgf????
- ?*?@date?:2012?三月?12??11:00:35???????????
- ?*?@version?:?1.0?
- ?*/??
- public?class?ExtendsOverRideLoad?extends?ExtendsFather?{??
- ????@Override??
- ????public?void?publicFunction()?{??
- ????????//super.publicFunction();?可以調用父類的方法??
- ????????System.out.println("Override?publicFunction");??
- ????}??
- ??????
- ????public?void?publicFunction(String?str)?{??
- ????????//super.publicFunction();?可以調用父類的方法??
- ????????System.out.println("overload?publicFunction");??
- ????}??
- ??????
- ????public?static?void?main(String[]?args)?{??
- ????????ExtendsFather?child=?new?ExtendsOverRideLoad();??
- ??????????
- ????????//Override?publicFunction??
- ????????child.publicFunction();??
- ??????????
- ????????//child.publicFunction("s");??僅僅只能使用到父類有的方法,重載的方法無法調用??
- ??????????
- ????????ExtendsOverRideLoad?childSecond?=?new?ExtendsOverRideLoad();??
- ??????????
- ????????//Override?publicFunction??
- ????????childSecond.publicFunction();??
- ??????????
- ????????//overload?publicFunction??
- ????????childSecond.publicFunction("overLoad");??
- ????}??
- }??
多態?
父類? Animal.java?
- /**?
- ?*?1.?Java中除了static和final方法外,其他所有的方法都是運行時綁定的?
- ?*?2.?構造方法是被隱式聲明為static方法?
- ?*?3.?動態綁定?
- ?*??將一個方法調用和一個方法主體連接到一起稱為綁定(Binding)。??
- ?*??根據綁定的時機不同,可將綁定分為“早期綁定”和“后期綁定”兩種。??
- ?*??如果在程序運行之前進行綁定(由編譯器和鏈接程序完成),稱為早期綁定。??
- ?*??如果在程序運行期間進行綁定,稱為后期綁定,后期綁定也稱為“動態綁定”或“運行時綁定”。??
- ?*??在Java中,多態性是依靠動態綁定實現的,即Java虛擬機在運行時確定要調用哪一個同名方法。??
- ?*?
- ?*??4.?多態總結?
- ?*??????一、使用父類類型的引用指向子類的對象?
- ?*??????二、該引用只能調用父類中定義的方法和變量?
- ?*??????三、如果子類中重寫了父類中的一個方法,那么在調用這個方法的時候,?
- ?*??????????將會調用子類中的這個方法;(動態連接、動態調用)?
- ?*??????四、變量不能被重寫(覆蓋),”重寫“的概念只針對方法,?
- ?*??????????如果在子類中”重寫“了父類中的變量,那么在編譯時會報錯。?
- ?*??5.?多態詳解?多態是通過:??
- ?*??????5.1?接口?和?實現接口并覆蓋接口中同一方法的幾不同的類體現的??
- ?*??????2?父類?和?繼承父類并覆蓋父類中同一方法的幾個不同子類實現的.?
- ?*?
- ?*??6.?一個類型引用只能引用引用類型自身含有的方法和變量?
- ?*/??
- package?com.study.feature;??
- ??
- /**????
- ?*?@className?:Animal???
- ?*?@package?:?com.study.feature??
- ?*?@Description?:多態的測試????
- ?*?@author:lgf????
- ?*?@date?:2012?三月?12??13:50:36???????????
- ?*?@version?:?1.0?
- ?*/??
- public?class?Animal?{??
- ????public?void?eat(){??
- ????????System.out.println("eating");??
- ????}??
- }??
多態實現?
- /**?
- ?*??
- ?*/??
- package?com.study.feature;??
- ??
- /**????
- ?*??
- ?*?@className?:Cat???
- ?*?@package?:?com.study.feature??
- ?*?@Description?:貓????
- ?*?@author:lgf????
- ?*?@date?:2012?三月?12??13:54:01???????????
- ?*?@version?:?1.0?
- ?*/??
- public?class?Cat?extends?Animal{??
- ????public?void?eat(){??
- ????????System.out.println("eating?fish");??
- ????}??
- }??
- /**?
- ?*??
- ?*/??
- package?com.study.feature;??
- ??
- /**????
- ?*??
- ?*?@className?:Dog???
- ?*?@package?:?com.study.feature??
- ?*?@Description?:狗????
- ?*?@author:lgf????
- ?*?@date?:2012?三月?12??13:55:38???????????
- ?*?@version?:?1.0?
- ?*/??
- public?class?Dog?extends?Animal{??
- ????public?void?eat(){??
- ????????System.out.println("eating?Bone");??
- ????}??
- }??
結果?
- /**?
- ?*??
- ?*/??
- package?com.study.feature;??
- ??
- /**????
- ?*??
- ?*?@className?:Main???
- ?*?@package?:?com.study.feature??
- ?*?@Description?:多態測試????
- ?*?@author:lgf????
- ?*?@date?:2012?三月?12??13:57:11???????????
- ?*?@version?:?1.0?
- ?*/??
- public?class?Main?{??
- ??????
- ????public?static?void?main(String[]?args)?{??
- ????????Animal?animal?=?null;??
- ????????animal?=?new?Animal();??
- ????????animal.eat();//eating??
- ????????Animal?cat?=?new?Cat();??
- ????????cat.eat();//eating?fish??
- ????????Animal?dog?=?new?Dog();??
- ????????dog.eat();//eating?Bone??
- ????}??
- }??
例子2?
- /**?
- ?*??
- ?*/??
- package?com.study.feature;??
- ??
- /**????
- ?*??
- ?*?@className?:Father???
- ?*?@package?:?com.study.feature??
- ?*?@Description?:多態????
- ?*?@author:lgf????
- ?*?@date?:2012?三月?12??14:53:41???????????
- ?*?@version?:?1.0?
- ?*/??
- public?class?Father?{??
- ????public?void?functionOne(){??
- ????????functionSecond();??
- ????}??
- ????public?void?functionSecond(){??
- ????????System.out.println("Father?functionSecond");??
- ????}??
- }??
- /**?
- ?*??
- ?*/??
- package?com.study.feature;??
- ??
- /**????
- ?*??
- ?*?@className?:Children???
- ?*?@package?:?com.study.feature??
- ?*?@Description?:測試????
- ?*?@author:lgf????
- ?*?@date?:2012?三月?12??14:55:15???????????
- ?*?@version?:?1.0?
- ?*/??
- public?class?Children?extends?Father{??
- ????public?void?functionSecond(){??
- ????????System.out.println("Children?functionSecond");??
- ????}??
- ??????
- ????public?static?void?main(String[]?args)?{??
- ????????Father?c?=?new?Children();??
- ????????c.functionOne();//Children?functionSecond??
- ????}??
- }?