Java抽象類、繼承及多態(tài)和適配器的實(shí)現(xiàn)代碼
Java繼承
方法重寫是Java語(yǔ)言多態(tài)的特性,必須滿足以下條件
- 在子類中,方法名稱與父類方法名稱完全相同
- 方法的參數(shù)個(gè)數(shù)和類型完全相同,返回類型完全相同
- 方法的訪問修飾符訪問級(jí)別不低于父類同名方法的訪問級(jí)別
- 在方法上添加@override注釋,如果報(bào)錯(cuò)說(shuō)明不是重寫
方法重寫限制
- final修飾的父類方法在子類中不能被重寫
- static修飾的父類方法在子類中不能被重寫,只能覆蓋
super關(guān)鍵字
super關(guān)鍵字和this類似,super修飾的是父類的對(duì)象,如super();調(diào)用的是父類的默認(rèn)無(wú)參構(gòu)造器
Java抽象類
抽象類特點(diǎn)
- 抽象類通常應(yīng)包含抽象方法,也可以包含非抽象方法
- 抽象類不能使用final關(guān)鍵字修飾
- 抽象類自身不能夠?qū)嵗?/li>
- 抽象類就是用來(lái)被繼承的
抽象類的繼承
- 子類必須實(shí)現(xiàn)父類所有的抽象方法
- 如果子類已經(jīng)override實(shí)現(xiàn)父類的抽象方法,間接子類可以不用實(shí)現(xiàn)該方法。
適配器
- 定義一個(gè)適配器,類名+Adapator。比如MamalAdapator。繼承給父類所有的方法一個(gè)空的實(shí)現(xiàn)。后面實(shí)例的類繼承這個(gè)適配器,就可以選擇性的重寫實(shí)現(xiàn)部分父類的方法而不會(huì)報(bào)錯(cuò)。
- 抽象類只提供一個(gè)抽象方法然后供子類去繼承和重寫override,然后特別是override的這個(gè)功能,可以做到比如Dog.eat,Cat.eat,不同的類,有不同的方法實(shí)現(xiàn),但是方法名稱都相同,給開發(fā)提供了極大的靈活性,后面的程序員接手開發(fā)的時(shí)候,比如需要再新增Tiger.eat,只需要再寫一個(gè)Tiger類繼承父類再override他的eat方法就可以了。
/** * 1 使用Eclipse 工具建立一個(gè)普通Java控制臺(tái)應(yīng)用程序, 自定義一個(gè)類繼承Counter 類, * 并根據(jù)理解定義在Counter類中定義的抽象方法對(duì)父類的抽象方法進(jìn)行實(shí)現(xiàn),體會(huì)普通類繼承 * 抽象類必需做什么? 不同子類在繼承Counter抽象類并實(shí)現(xiàn)抽象方法時(shí)的算法和什么有關(guān). */ public class Test { public static void main(String[] args) { //用父類的類型去new一個(gè)子類 Counter cou = new Add(); //用父類的類型去調(diào)用子類的addition方法并實(shí)現(xiàn) System.out.println("3+9的和是"+cou.addition(3,9)); } }
/** * 1 使用Eclipse 工具建立一個(gè)普通Java控制臺(tái)應(yīng)用程序, * 自定義一個(gè)類繼承Counter 類,并根據(jù)理解定義在Counter * 類中定義的抽象方法對(duì)父類的抽象方法進(jìn)行實(shí)現(xiàn),體會(huì)普通類 * 繼承抽象類必需做什么? 不同子類在繼承Counter抽象類并 * 實(shí)現(xiàn)抽象方法時(shí)的算法和什么有關(guān). */ //定義一個(gè)抽象的父類Counter public abstract class Counter { //定義一個(gè)抽象方法addition public abstract int addition(int num1, int num2); public Counter(){ System.out.println("調(diào)用Counter父類構(gòu)造器"); } }
/** * 1 使用Eclipse 工具建立一個(gè)普通Java控制臺(tái)應(yīng)用程序, * 自定義一個(gè)類繼承Counter 類,并根據(jù)理解定義在Counter類中 * 定義的抽象方法對(duì)父類的抽象方法進(jìn)行實(shí)現(xiàn),體會(huì)普通類繼承抽象 * 類必需做什么? 不同子類在繼承Counter抽象類并實(shí)現(xiàn)抽象方法 * 時(shí)的算法和什么有關(guān). */ public class Add extends Counter{ int num1 = 0; int num2 = 0; //重寫父類中的加法并實(shí)現(xiàn)加法 @Override public int addition(int num1, int num2) { this.num1 = num1; this.num2 = num2; return num1+num2; } public Add(){ System.out.println("調(diào)用Add子類構(gòu)造器"); } }
-----------------------------------------------分割線--------------------------------------------------------------
/** *2 生活中很多東西都可以被人利用從而作為一種工具,這些工具都具備一個(gè)共同的功能那就是“用途”, * 同時(shí)也有很多適合某個(gè)領(lǐng)域的工具(如,交通工具,建筑工具等 ),它們也在工具的范疇之內(nèi), 也有用 * 途功能,同時(shí)又具備自己的一些領(lǐng)域功能, 人們?cè)谑褂眠@些工具時(shí),可以根據(jù)實(shí)際情況選擇哪種具體 * 類別的工具實(shí)體. * 根據(jù)以上描述,結(jié)合本單元知識(shí)點(diǎn),設(shè)計(jì)工具抽象類定義用途的抽象方法,在此類的基礎(chǔ)上定義在此抽 * 象工具類范疇內(nèi)的至少2種特殊工具的抽象類并繼承上述的工具類 , 再根據(jù)實(shí)際使用工具的情況定 * 義更具體的工具類實(shí)現(xiàn)對(duì)2種特殊工具類其一的繼承, 分別實(shí)例化頂級(jí)工具類及特殊工具類對(duì)象,調(diào) * 用其中功能方法, 理解領(lǐng)悟抽象類之間的繼承及實(shí)現(xiàn)多層繼承的普通類要注意哪些問題. * * 3 繼任務(wù)2實(shí)現(xiàn), 當(dāng)我們?cè)谑褂美^承抽象父類的時(shí)候, 我們的本意只是為使用某個(gè)抽象類的特定方法, * 但是受于普通類繼承抽象類的限制,必需實(shí)現(xiàn)所有父級(jí)抽象類中的所有方法,既使不用那些方法也必需 * 在子類中提供抽象方法的空實(shí)現(xiàn),如何解決這個(gè)問題呢, 請(qǐng)?jiān)谌蝿?wù)2的基礎(chǔ)上編程實(shí)現(xiàn). */ package tool.test; import tool.abstracts.Construct; import tool.abstracts.Tool; import tool.abstracts.Traffic; import tool.imp.Car; import tool.imp.Hammer; public class Test { public static void main(String[] args) { //實(shí)例化頂級(jí)工具類對(duì)象,調(diào)用其中功能方法 Tool tool1 = new Traffic() { @Override public void constructTool() { } }; tool1.trafficTool(); Tool tool2 = new Construct() { @Override public void trafficTool() { } }; tool2.constructTool(); //實(shí)例化特殊工具類對(duì)象,調(diào)用其中功能方法 Traffic traffic = new Car(); traffic.trafficTool(); Construct construct = new Hammer(); construct.constructTool(); } }
/** *2 生活中很多東西都可以被人利用從而作為一種工具,這些工具都具備一個(gè)共同的功能那就是“用途”, * 同時(shí)也有很多適合某個(gè)領(lǐng)域的工具(如,交通工具,建筑工具等 ),它們也在工具的范疇之內(nèi), 也有用 * 途功能,同時(shí)又具備自己的一些領(lǐng)域功能, 人們?cè)谑褂眠@些工具時(shí),可以根據(jù)實(shí)際情況選擇哪種具體 * 類別的工具實(shí)體. * 根據(jù)以上描述,結(jié)合本單元知識(shí)點(diǎn),設(shè)計(jì)工具抽象類定義用途的抽象方法,在此類的基礎(chǔ)上定義在此抽 * 象工具類范疇內(nèi)的至少2種特殊工具的抽象類并繼承上述的工具類 , 再根據(jù)實(shí)際使用工具的情況定 * 義更具體的工具類實(shí)現(xiàn)對(duì)2種特殊工具類其一的繼承, 分別實(shí)例化頂級(jí)工具類及特殊工具類對(duì)象,調(diào) * 用其中功能方法, 理解領(lǐng)悟抽象類之間的繼承及實(shí)現(xiàn)多層繼承的普通類要注意哪些問題. * * 3 繼任務(wù)2實(shí)現(xiàn), 當(dāng)我們?cè)谑褂美^承抽象父類的時(shí)候, 我們的本意只是為使用某個(gè)抽象類的特定方法, * 但是受于普通類繼承抽象類的限制,必需實(shí)現(xiàn)所有父級(jí)抽象類中的所有方法,既使不用那些方法也必需 * 在子類中提供抽象方法的空實(shí)現(xiàn),如何解決這個(gè)問題呢, 請(qǐng)?jiān)谌蝿?wù)2的基礎(chǔ)上編程實(shí)現(xiàn). */ package tool.abstracts; //定義一個(gè)tool抽象類 public abstract class Tool { //定義一個(gè)交通工具抽象方法 public abstract void trafficTool(); //定義一個(gè)建筑工具抽象方法 public abstract void constructTool(); }
/** *2 生活中很多東西都可以被人利用從而作為一種工具,這些工具都具備一個(gè)共同的功能那就是“用途”, * 同時(shí)也有很多適合某個(gè)領(lǐng)域的工具(如,交通工具,建筑工具等 ),它們也在工具的范疇之內(nèi), 也有用 * 途功能,同時(shí)又具備自己的一些領(lǐng)域功能, 人們?cè)谑褂眠@些工具時(shí),可以根據(jù)實(shí)際情況選擇哪種具體 * 類別的工具實(shí)體. * 根據(jù)以上描述,結(jié)合本單元知識(shí)點(diǎn),設(shè)計(jì)工具抽象類定義用途的抽象方法,在此類的基礎(chǔ)上定義在此抽 * 象工具類范疇內(nèi)的至少2種特殊工具的抽象類并繼承上述的工具類 , 再根據(jù)實(shí)際使用工具的情況定 * 義更具體的工具類實(shí)現(xiàn)對(duì)2種特殊工具類其一的繼承, 分別實(shí)例化頂級(jí)工具類及特殊工具類對(duì)象,調(diào) * 用其中功能方法, 理解領(lǐng)悟抽象類之間的繼承及實(shí)現(xiàn)多層繼承的普通類要注意哪些問題. * * 3 繼任務(wù)2實(shí)現(xiàn), 當(dāng)我們?cè)谑褂美^承抽象父類的時(shí)候, 我們的本意只是為使用某個(gè)抽象類的特定方法, * 但是受于普通類繼承抽象類的限制,必需實(shí)現(xiàn)所有父級(jí)抽象類中的所有方法,既使不用那些方法也必需 * 在子類中提供抽象方法的空實(shí)現(xiàn),如何解決這個(gè)問題呢, 請(qǐng)?jiān)谌蝿?wù)2的基礎(chǔ)上編程實(shí)現(xiàn). */ package tool.abstracts; //定義一個(gè)交通工具抽象類繼承自工具類 public abstract class Traffic extends Tool { public void trafficTool(){ System.out.println("我是所有交通工具的集合"); }; }
/** *2 生活中很多東西都可以被人利用從而作為一種工具,這些工具都具備一個(gè)共同的功能那就是“用途”, * 同時(shí)也有很多適合某個(gè)領(lǐng)域的工具(如,交通工具,建筑工具等 ),它們也在工具的范疇之內(nèi), 也有用 * 途功能,同時(shí)又具備自己的一些領(lǐng)域功能, 人們?cè)谑褂眠@些工具時(shí),可以根據(jù)實(shí)際情況選擇哪種具體 * 類別的工具實(shí)體. * 根據(jù)以上描述,結(jié)合本單元知識(shí)點(diǎn),設(shè)計(jì)工具抽象類定義用途的抽象方法,在此類的基礎(chǔ)上定義在此抽 * 象工具類范疇內(nèi)的至少2種特殊工具的抽象類并繼承上述的工具類 , 再根據(jù)實(shí)際使用工具的情況定 * 義更具體的工具類實(shí)現(xiàn)對(duì)2種特殊工具類其一的繼承, 分別實(shí)例化頂級(jí)工具類及特殊工具類對(duì)象,調(diào) * 用其中功能方法, 理解領(lǐng)悟抽象類之間的繼承及實(shí)現(xiàn)多層繼承的普通類要注意哪些問題. * * 3 繼任務(wù)2實(shí)現(xiàn), 當(dāng)我們?cè)谑褂美^承抽象父類的時(shí)候, 我們的本意只是為使用某個(gè)抽象類的特定方法, * 但是受于普通類繼承抽象類的限制,必需實(shí)現(xiàn)所有父級(jí)抽象類中的所有方法,既使不用那些方法也必需 * 在子類中提供抽象方法的空實(shí)現(xiàn),如何解決這個(gè)問題呢, 請(qǐng)?jiān)谌蝿?wù)2的基礎(chǔ)上編程實(shí)現(xiàn). */ package tool.abstracts; //定義一個(gè)建筑工具抽象類繼承自工具類 public abstract class Construct extends Tool { public void constructTool(){ System.out.println("我是所有建筑工具的集合"); }; }
/** *2 生活中很多東西都可以被人利用從而作為一種工具,這些工具都具備一個(gè)共同的功能那就是“用途”, * 同時(shí)也有很多適合某個(gè)領(lǐng)域的工具(如,交通工具,建筑工具等 ),它們也在工具的范疇之內(nèi), 也有用 * 途功能,同時(shí)又具備自己的一些領(lǐng)域功能, 人們?cè)谑褂眠@些工具時(shí),可以根據(jù)實(shí)際情況選擇哪種具體 * 類別的工具實(shí)體. * 根據(jù)以上描述,結(jié)合本單元知識(shí)點(diǎn),設(shè)計(jì)工具抽象類定義用途的抽象方法,在此類的基礎(chǔ)上定義在此抽 * 象工具類范疇內(nèi)的至少2種特殊工具的抽象類并繼承上述的工具類 , 再根據(jù)實(shí)際使用工具的情況定 * 義更具體的工具類實(shí)現(xiàn)對(duì)2種特殊工具類其一的繼承, 分別實(shí)例化頂級(jí)工具類及特殊工具類對(duì)象,調(diào) * 用其中功能方法, 理解領(lǐng)悟抽象類之間的繼承及實(shí)現(xiàn)多層繼承的普通類要注意哪些問題. * * 3 繼任務(wù)2實(shí)現(xiàn), 當(dāng)我們?cè)谑褂美^承抽象父類的時(shí)候, 我們的本意只是為使用某個(gè)抽象類的特定方法, * 但是受于普通類繼承抽象類的限制,必需實(shí)現(xiàn)所有父級(jí)抽象類中的所有方法,既使不用那些方法也必需 * 在子類中提供抽象方法的空實(shí)現(xiàn),如何解決這個(gè)問題呢, 請(qǐng)?jiān)谌蝿?wù)2的基礎(chǔ)上編程實(shí)現(xiàn). */ package tool.adaptor; import tool.abstracts.Construct; //定義一個(gè)Construct的適配器 public class ConstructAdaptor extends Construct { //對(duì)交通工具方法進(jìn)行一個(gè)重寫和空實(shí)現(xiàn) @Override public void trafficTool() { } //對(duì)建筑工具方法進(jìn)行一個(gè)重寫和空實(shí)現(xiàn) @Override public void constructTool() { } }
/** *2 生活中很多東西都可以被人利用從而作為一種工具,這些工具都具備一個(gè)共同的功能那就是“用途”, * 同時(shí)也有很多適合某個(gè)領(lǐng)域的工具(如,交通工具,建筑工具等 ),它們也在工具的范疇之內(nèi), 也有用 * 途功能,同時(shí)又具備自己的一些領(lǐng)域功能, 人們?cè)谑褂眠@些工具時(shí),可以根據(jù)實(shí)際情況選擇哪種具體 * 類別的工具實(shí)體. * 根據(jù)以上描述,結(jié)合本單元知識(shí)點(diǎn),設(shè)計(jì)工具抽象類定義用途的抽象方法,在此類的基礎(chǔ)上定義在此抽 * 象工具類范疇內(nèi)的至少2種特殊工具的抽象類并繼承上述的工具類 , 再根據(jù)實(shí)際使用工具的情況定 * 義更具體的工具類實(shí)現(xiàn)對(duì)2種特殊工具類其一的繼承, 分別實(shí)例化頂級(jí)工具類及特殊工具類對(duì)象,調(diào) * 用其中功能方法, 理解領(lǐng)悟抽象類之間的繼承及實(shí)現(xiàn)多層繼承的普通類要注意哪些問題. * * 3 繼任務(wù)2實(shí)現(xiàn), 當(dāng)我們?cè)谑褂美^承抽象父類的時(shí)候, 我們的本意只是為使用某個(gè)抽象類的特定方法, * 但是受于普通類繼承抽象類的限制,必需實(shí)現(xiàn)所有父級(jí)抽象類中的所有方法,既使不用那些方法也必需 * 在子類中提供抽象方法的空實(shí)現(xiàn),如何解決這個(gè)問題呢, 請(qǐng)?jiān)谌蝿?wù)2的基礎(chǔ)上編程實(shí)現(xiàn). */ package tool.adaptor; import tool.abstracts.Traffic; //定義一個(gè)Traffic的適配器 public class TrafficAdaptor extends Traffic { //對(duì)交通工具方法進(jìn)行一個(gè)重寫和空實(shí)現(xiàn) @Override public void trafficTool() { System.out.println("我是所有交通工具的集合"); } //對(duì)建筑工具方法進(jìn)行一個(gè)重寫和空實(shí)現(xiàn) @Override public void constructTool() { } }
/** *2 生活中很多東西都可以被人利用從而作為一種工具,這些工具都具備一個(gè)共同的功能那就是“用途”, * 同時(shí)也有很多適合某個(gè)領(lǐng)域的工具(如,交通工具,建筑工具等 ),它們也在工具的范疇之內(nèi), 也有用 * 途功能,同時(shí)又具備自己的一些領(lǐng)域功能, 人們?cè)谑褂眠@些工具時(shí),可以根據(jù)實(shí)際情況選擇哪種具體 * 類別的工具實(shí)體. * 根據(jù)以上描述,結(jié)合本單元知識(shí)點(diǎn),設(shè)計(jì)工具抽象類定義用途的抽象方法,在此類的基礎(chǔ)上定義在此抽 * 象工具類范疇內(nèi)的至少2種特殊工具的抽象類并繼承上述的工具類 , 再根據(jù)實(shí)際使用工具的情況定 * 義更具體的工具類實(shí)現(xiàn)對(duì)2種特殊工具類其一的繼承, 分別實(shí)例化頂級(jí)工具類及特殊工具類對(duì)象,調(diào) * 用其中功能方法, 理解領(lǐng)悟抽象類之間的繼承及實(shí)現(xiàn)多層繼承的普通類要注意哪些問題. * * 3 繼任務(wù)2實(shí)現(xiàn), 當(dāng)我們?cè)谑褂美^承抽象父類的時(shí)候, 我們的本意只是為使用某個(gè)抽象類的特定方法, * 但是受于普通類繼承抽象類的限制,必需實(shí)現(xiàn)所有父級(jí)抽象類中的所有方法,既使不用那些方法也必需 * 在子類中提供抽象方法的空實(shí)現(xiàn),如何解決這個(gè)問題呢, 請(qǐng)?jiān)谌蝿?wù)2的基礎(chǔ)上編程實(shí)現(xiàn). */ package tool.imp; import tool.adaptor.TrafficAdaptor; //定義一個(gè)普通類并具體實(shí)現(xiàn)交通工具方法 public class Car extends TrafficAdaptor { @Override public void trafficTool() { System.out.println("我是交通工具汽車"); } }
/** *2 生活中很多東西都可以被人利用從而作為一種工具,這些工具都具備一個(gè)共同的功能那就是“用途”, * 同時(shí)也有很多適合某個(gè)領(lǐng)域的工具(如,交通工具,建筑工具等 ),它們也在工具的范疇之內(nèi), 也有用 * 途功能,同時(shí)又具備自己的一些領(lǐng)域功能, 人們?cè)谑褂眠@些工具時(shí),可以根據(jù)實(shí)際情況選擇哪種具體 * 類別的工具實(shí)體. * 根據(jù)以上描述,結(jié)合本單元知識(shí)點(diǎn),設(shè)計(jì)工具抽象類定義用途的抽象方法,在此類的基礎(chǔ)上定義在此抽 * 象工具類范疇內(nèi)的至少2種特殊工具的抽象類并繼承上述的工具類 , 再根據(jù)實(shí)際使用工具的情況定 * 義更具體的工具類實(shí)現(xiàn)對(duì)2種特殊工具類其一的繼承, 分別實(shí)例化頂級(jí)工具類及特殊工具類對(duì)象,調(diào) * 用其中功能方法, 理解領(lǐng)悟抽象類之間的繼承及實(shí)現(xiàn)多層繼承的普通類要注意哪些問題. * * 3 繼任務(wù)2實(shí)現(xiàn), 當(dāng)我們?cè)谑褂美^承抽象父類的時(shí)候, 我們的本意只是為使用某個(gè)抽象類的特定方法, * 但是受于普通類繼承抽象類的限制,必需實(shí)現(xiàn)所有父級(jí)抽象類中的所有方法,既使不用那些方法也必需 * 在子類中提供抽象方法的空實(shí)現(xiàn),如何解決這個(gè)問題呢, 請(qǐng)?jiān)谌蝿?wù)2的基礎(chǔ)上編程實(shí)現(xiàn). */ package tool.imp; import tool.adaptor.ConstructAdaptor; //定義一個(gè)普通類并具體實(shí)現(xiàn)建筑工具方法 public class Hammer extends ConstructAdaptor { @Override public void constructTool(){ System.out.println("我是建筑工具錘子"); } }
-----------------------------------分割線-----------------------------------
/** * 4 在生活中,人們都會(huì)根據(jù)實(shí)際情況為完成某項(xiàng)任務(wù)而選擇利用不同的工具. * 如我要旅行,會(huì)用到汽車或者飛機(jī),我在打印文件時(shí)會(huì)用到打印機(jī),我要學(xué)習(xí) * java會(huì)用到筆記本電腦, 如何設(shè)計(jì)一個(gè)應(yīng)用程序定義一個(gè)人類并在人類中 * 定義一個(gè)使用工具的方法, 能夠讓在真正使用工具時(shí), 用什么工具則這個(gè) * 工具就能夠出現(xiàn)在使用工具的過程中,請(qǐng)根據(jù)java語(yǔ)言繼承及多態(tài)的特點(diǎn) * 完成此編程任務(wù). */ package test; import abstracts.Tool; import imp.*; //定義一個(gè)主類Test public class Test { public static void main(String[] args) { //實(shí)例化Person類 Person per = new Person(); //通過多態(tài)的方式,以父類的類型實(shí)例化各個(gè)子類 Tool car = new Car(); Tool plane = new Plane(); Tool print = new Printer(); Tool laptop = new Laptop(); //調(diào)用對(duì)應(yīng)的子類去具體實(shí)現(xiàn)抽象方法 per.useTool(car); per.useTool(plane); per.useTool(print); per.useTool(laptop); } }
/** * 4 在生活中,人們都會(huì)根據(jù)實(shí)際情況為完成某項(xiàng)任務(wù)而選擇利用不同的工具. * 如我要旅行,會(huì)用到汽車或者飛機(jī),我在打印文件時(shí)會(huì)用到打印機(jī),我要學(xué)習(xí) * java會(huì)用到筆記本電腦, 如何設(shè)計(jì)一個(gè)應(yīng)用程序定義一個(gè)人類并在人類中 * 定義一個(gè)使用工具的方法, 能夠讓在真正使用工具時(shí), 用什么工具則這個(gè) * 工具就能夠出現(xiàn)在使用工具的過程中,請(qǐng)根據(jù)java語(yǔ)言繼承及多態(tài)的特點(diǎn) * 完成此編程任務(wù). */ package abstracts; //定義一個(gè)抽象的工具類作為父類 public abstract class Tool { //定義一個(gè)旅行的抽象方法 public abstract void travel(); //定義一個(gè)打印的抽象方法 public abstract void print(); //定義一個(gè)學(xué)習(xí)的抽象方法 public abstract void study(); }
/** * 4 在生活中,人們都會(huì)根據(jù)實(shí)際情況為完成某項(xiàng)任務(wù)而選擇利用不同的工具. * 如我要旅行,會(huì)用到汽車或者飛機(jī),我在打印文件時(shí)會(huì)用到打印機(jī),我要學(xué)習(xí) * java會(huì)用到筆記本電腦, 如何設(shè)計(jì)一個(gè)應(yīng)用程序定義一個(gè)人類并在人類中 * 定義一個(gè)使用工具的方法, 能夠讓在真正使用工具時(shí), 用什么工具則這個(gè) * 工具就能夠出現(xiàn)在使用工具的過程中,請(qǐng)根據(jù)java語(yǔ)言繼承及多態(tài)的特點(diǎn) * 完成此編程任務(wù). */ package adaptor; import abstracts.Tool; //定義一個(gè)適配器,繼承工具類并提供3個(gè)方法的空實(shí)現(xiàn) public class ToolAdaptor extends Tool { @Override public void travel() { } @Override public void print() { } @Override public void study() { } }
/** * 4 在生活中,人們都會(huì)根據(jù)實(shí)際情況為完成某項(xiàng)任務(wù)而選擇利用不同的工具. * 如我要旅行,會(huì)用到汽車或者飛機(jī),我在打印文件時(shí)會(huì)用到打印機(jī),我要學(xué)習(xí) * java會(huì)用到筆記本電腦, 如何設(shè)計(jì)一個(gè)應(yīng)用程序定義一個(gè)人類并在人類中 * 定義一個(gè)使用工具的方法, 能夠讓在真正使用工具時(shí), 用什么工具則這個(gè) * 工具就能夠出現(xiàn)在使用工具的過程中,請(qǐng)根據(jù)java語(yǔ)言繼承及多態(tài)的特點(diǎn) * 完成此編程任務(wù). */ package imp; import adaptor.ToolAdaptor; //定義一個(gè)汽車類繼承父類的適配器,重寫并具體實(shí)現(xiàn)旅行的這個(gè)抽象方法 public class Car extends ToolAdaptor { @Override public void travel() { System.out.println("使用汽車旅行"); } }
/** * 4 在生活中,人們都會(huì)根據(jù)實(shí)際情況為完成某項(xiàng)任務(wù)而選擇利用不同的工具. * 如我要旅行,會(huì)用到汽車或者飛機(jī),我在打印文件時(shí)會(huì)用到打印機(jī),我要學(xué)習(xí) * java會(huì)用到筆記本電腦, 如何設(shè)計(jì)一個(gè)應(yīng)用程序定義一個(gè)人類并在人類中 * 定義一個(gè)使用工具的方法, 能夠讓在真正使用工具時(shí), 用什么工具則這個(gè) * 工具就能夠出現(xiàn)在使用工具的過程中,請(qǐng)根據(jù)java語(yǔ)言繼承及多態(tài)的特點(diǎn) * 完成此編程任務(wù). */ package imp; import adaptor.ToolAdaptor; //定義一個(gè)飛機(jī)類繼承父類的適配器,重寫并具體實(shí)現(xiàn)旅行的這個(gè)抽象方法 public class Plane extends ToolAdaptor { @Override public void travel(){ System.out.println("使用飛機(jī)旅行"); } }
/** * 4 在生活中,人們都會(huì)根據(jù)實(shí)際情況為完成某項(xiàng)任務(wù)而選擇利用不同的工具. * 如我要旅行,會(huì)用到汽車或者飛機(jī),我在打印文件時(shí)會(huì)用到打印機(jī),我要學(xué)習(xí) * java會(huì)用到筆記本電腦, 如何設(shè)計(jì)一個(gè)應(yīng)用程序定義一個(gè)人類并在人類中 * 定義一個(gè)使用工具的方法, 能夠讓在真正使用工具時(shí), 用什么工具則這個(gè) * 工具就能夠出現(xiàn)在使用工具的過程中,請(qǐng)根據(jù)java語(yǔ)言繼承及多態(tài)的特點(diǎn) * 完成此編程任務(wù). */ package imp; import adaptor.ToolAdaptor; //定義一個(gè)筆記本電腦類繼承父類的適配器,重寫并具體實(shí)現(xiàn)學(xué)習(xí)的這個(gè)抽象方法 public class Laptop extends ToolAdaptor { @Override public void study(){ System.out.println("使用筆記本電腦學(xué)習(xí)Java"); } }
/** * 4 在生活中,人們都會(huì)根據(jù)實(shí)際情況為完成某項(xiàng)任務(wù)而選擇利用不同的工具. * 如我要旅行,會(huì)用到汽車或者飛機(jī),我在打印文件時(shí)會(huì)用到打印機(jī),我要學(xué)習(xí) * java會(huì)用到筆記本電腦, 如何設(shè)計(jì)一個(gè)應(yīng)用程序定義一個(gè)人類并在人類中 * 定義一個(gè)使用工具的方法, 能夠讓在真正使用工具時(shí), 用什么工具則這個(gè) * 工具就能夠出現(xiàn)在使用工具的過程中,請(qǐng)根據(jù)java語(yǔ)言繼承及多態(tài)的特點(diǎn) * 完成此編程任務(wù). */ package imp; import adaptor.ToolAdaptor; //定義一個(gè)打印機(jī)類繼承父類的適配器,重寫并具體實(shí)現(xiàn)打印的這個(gè)抽象方法 public class Printer extends ToolAdaptor { @Override public void print() { System.out.println("使用打印機(jī)打印文件"); } }
/** * 4 在生活中,人們都會(huì)根據(jù)實(shí)際情況為完成某項(xiàng)任務(wù)而選擇利用不同的工具. * 如我要旅行,會(huì)用到汽車或者飛機(jī),我在打印文件時(shí)會(huì)用到打印機(jī),我要學(xué)習(xí) * java會(huì)用到筆記本電腦, 如何設(shè)計(jì)一個(gè)應(yīng)用程序定義一個(gè)人類并在人類中 * 定義一個(gè)使用工具的方法, 能夠讓在真正使用工具時(shí), 用什么工具則這個(gè) * 工具就能夠出現(xiàn)在使用工具的過程中,請(qǐng)根據(jù)java語(yǔ)言繼承及多態(tài)的特點(diǎn) * 完成此編程任務(wù). */ package imp; import abstracts.Tool; //定義一個(gè)Person類 public class Person { //定義一個(gè)使用工具的方法,接收tool抽象類的類型,并調(diào)用tool抽象類的三個(gè)抽象方法 public void useTool(Tool tool){ tool.travel(); tool.print(); tool.study(); } }
以上就是Java抽象類、繼承及多態(tài)和適配器的實(shí)現(xiàn)的詳細(xì)內(nèi)容,更多關(guān)于java抽象類繼承多態(tài)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java實(shí)現(xiàn)的zip壓縮及解壓縮工具類示例
這篇文章主要介紹了Java實(shí)現(xiàn)的zip壓縮及解壓縮工具類,結(jié)合實(shí)例形式分析了java對(duì)文件的進(jìn)行zip壓縮及解壓縮的具體操作技巧,需要的朋友可以參考下2018-01-01SpringBoot整合SpringSecurity實(shí)現(xiàn)JWT認(rèn)證的項(xiàng)目實(shí)踐
本文會(huì)通過創(chuàng)建SpringBoot項(xiàng)目整合SpringSecurity,實(shí)現(xiàn)完整的JWT認(rèn)證機(jī)制,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07使用JDBC4.0操作XML類型的字段(保存獲取xml數(shù)據(jù))的方法
jdbc4.0最重要的特征是支持xml數(shù)據(jù)類型,接下來(lái)通過本文重點(diǎn)給大家介紹如何使用jdbc4.0操作xml類型的字段,對(duì)jdbc4.0 xml相關(guān)知識(shí)感興趣的朋友一起看下吧2016-08-08一文詳解SpringBoot中CommandLineRunner接口
Spring Boot的CommandLineRunner接口是一個(gè)函數(shù)式接口,用于在Spring Boot應(yīng)用程序啟動(dòng)后執(zhí)行一些初始化操作,它提供了一個(gè)run方法,該方法在應(yīng)用程序啟動(dòng)后被調(diào)用,本文給大家詳細(xì)介紹了SpringBoot中CommandLineRunner接口,需要的朋友可以參考下2023-10-10Spring Bean生命周期之BeanDefinition的合并過程詳解
這篇文章主要為大家詳細(xì)介紹了Spring Bean生命周期之BeanDefinition的合并過程,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-03-03詳解JAVA如何實(shí)現(xiàn)樂觀鎖以及CAS機(jī)制
悲觀鎖和樂觀鎖其實(shí)本質(zhì)都是一種思想,在JAVA中對(duì)于悲觀鎖的實(shí)現(xiàn)大家可能都很了解,可以通過synchronized、ReentrantLock加鎖實(shí)現(xiàn),本文不展開講解了。那么樂觀鎖在JAVA中是如何實(shí)現(xiàn)的呢?底層的實(shí)現(xiàn)機(jī)制又是什么呢?本文就來(lái)和大家詳細(xì)講講2022-12-12springboot+mybatis+枚舉處理器的實(shí)現(xiàn)
在Spring?boot項(xiàng)目開發(fā)中經(jīng)常遇到需要使用枚舉的場(chǎng)景,本文就介紹了springboot+mybatis+枚舉處理器的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03SpringBoot實(shí)現(xiàn)整合微信支付方法詳解
這篇文章主要介紹了SpringBoot實(shí)現(xiàn)整合微信支付的過程詳解,文中的示例代碼對(duì)我們的工作或?qū)W習(xí)有一定的幫助,感興趣的小伙伴可以跟隨小編學(xué)習(xí)一下2021-12-12詳解SpringSecurity中的Authentication信息與登錄流程
這篇文章主要介紹了SpringSecurity中的Authentication信息與登錄流程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09Mybatis?Plus使用XML編寫動(dòng)態(tài)sql的超簡(jiǎn)易方法
這篇文章主要介紹了Mybatis?Plus使用XML編寫動(dòng)態(tài)sql的超簡(jiǎn)易方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01