Java抽象類(lèi)、繼承及多態(tài)和適配器的實(shí)現(xiàn)代碼
Java繼承
方法重寫(xiě)是Java語(yǔ)言多態(tài)的特性,必須滿足以下條件
- 在子類(lèi)中,方法名稱(chēng)與父類(lèi)方法名稱(chēng)完全相同
- 方法的參數(shù)個(gè)數(shù)和類(lèi)型完全相同,返回類(lèi)型完全相同
- 方法的訪問(wèn)修飾符訪問(wèn)級(jí)別不低于父類(lèi)同名方法的訪問(wèn)級(jí)別
- 在方法上添加@override注釋?zhuān)绻麍?bào)錯(cuò)說(shuō)明不是重寫(xiě)
方法重寫(xiě)限制
- final修飾的父類(lèi)方法在子類(lèi)中不能被重寫(xiě)
- static修飾的父類(lèi)方法在子類(lèi)中不能被重寫(xiě),只能覆蓋
super關(guān)鍵字
super關(guān)鍵字和this類(lèi)似,super修飾的是父類(lèi)的對(duì)象,如super();調(diào)用的是父類(lèi)的默認(rèn)無(wú)參構(gòu)造器
Java抽象類(lèi)
抽象類(lèi)特點(diǎn)
- 抽象類(lèi)通常應(yīng)包含抽象方法,也可以包含非抽象方法
- 抽象類(lèi)不能使用final關(guān)鍵字修飾
- 抽象類(lèi)自身不能夠?qū)嵗?/li>
- 抽象類(lèi)就是用來(lái)被繼承的
抽象類(lèi)的繼承
- 子類(lèi)必須實(shí)現(xiàn)父類(lèi)所有的抽象方法
- 如果子類(lèi)已經(jīng)override實(shí)現(xiàn)父類(lèi)的抽象方法,間接子類(lèi)可以不用實(shí)現(xiàn)該方法。
適配器
- 定義一個(gè)適配器,類(lèi)名+Adapator。比如MamalAdapator。繼承給父類(lèi)所有的方法一個(gè)空的實(shí)現(xiàn)。后面實(shí)例的類(lèi)繼承這個(gè)適配器,就可以選擇性的重寫(xiě)實(shí)現(xiàn)部分父類(lèi)的方法而不會(huì)報(bào)錯(cuò)。
- 抽象類(lèi)只提供一個(gè)抽象方法然后供子類(lèi)去繼承和重寫(xiě)override,然后特別是override的這個(gè)功能,可以做到比如Dog.eat,Cat.eat,不同的類(lèi),有不同的方法實(shí)現(xiàn),但是方法名稱(chēng)都相同,給開(kāi)發(fā)提供了極大的靈活性,后面的程序員接手開(kāi)發(fā)的時(shí)候,比如需要再新增Tiger.eat,只需要再寫(xiě)一個(gè)Tiger類(lèi)繼承父類(lèi)再override他的eat方法就可以了。
/**
* 1 使用Eclipse 工具建立一個(gè)普通Java控制臺(tái)應(yīng)用程序, 自定義一個(gè)類(lèi)繼承Counter 類(lèi),
* 并根據(jù)理解定義在Counter類(lèi)中定義的抽象方法對(duì)父類(lèi)的抽象方法進(jìn)行實(shí)現(xiàn),體會(huì)普通類(lèi)繼承
* 抽象類(lèi)必需做什么? 不同子類(lèi)在繼承Counter抽象類(lèi)并實(shí)現(xiàn)抽象方法時(shí)的算法和什么有關(guān).
*/
public class Test {
public static void main(String[] args) {
//用父類(lèi)的類(lèi)型去new一個(gè)子類(lèi)
Counter cou = new Add();
//用父類(lèi)的類(lèi)型去調(diào)用子類(lèi)的addition方法并實(shí)現(xiàn)
System.out.println("3+9的和是"+cou.addition(3,9));
}
}
/**
* 1 使用Eclipse 工具建立一個(gè)普通Java控制臺(tái)應(yīng)用程序,
* 自定義一個(gè)類(lèi)繼承Counter 類(lèi),并根據(jù)理解定義在Counter
* 類(lèi)中定義的抽象方法對(duì)父類(lèi)的抽象方法進(jìn)行實(shí)現(xiàn),體會(huì)普通類(lèi)
* 繼承抽象類(lèi)必需做什么? 不同子類(lèi)在繼承Counter抽象類(lèi)并
* 實(shí)現(xiàn)抽象方法時(shí)的算法和什么有關(guān).
*/
//定義一個(gè)抽象的父類(lèi)Counter
public abstract class Counter {
//定義一個(gè)抽象方法addition
public abstract int addition(int num1, int num2);
public Counter(){
System.out.println("調(diào)用Counter父類(lèi)構(gòu)造器");
}
}
/**
* 1 使用Eclipse 工具建立一個(gè)普通Java控制臺(tái)應(yīng)用程序,
* 自定義一個(gè)類(lèi)繼承Counter 類(lèi),并根據(jù)理解定義在Counter類(lèi)中
* 定義的抽象方法對(duì)父類(lèi)的抽象方法進(jìn)行實(shí)現(xiàn),體會(huì)普通類(lèi)繼承抽象
* 類(lèi)必需做什么? 不同子類(lèi)在繼承Counter抽象類(lèi)并實(shí)現(xiàn)抽象方法
* 時(shí)的算法和什么有關(guān).
*/
public class Add extends Counter{
int num1 = 0;
int num2 = 0;
//重寫(xiě)父類(lèi)中的加法并實(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子類(lèi)構(gòu)造器");
}
}
-----------------------------------------------分割線--------------------------------------------------------------
/**
*2 生活中很多東西都可以被人利用從而作為一種工具,這些工具都具備一個(gè)共同的功能那就是“用途”,
* 同時(shí)也有很多適合某個(gè)領(lǐng)域的工具(如,交通工具,建筑工具等 ),它們也在工具的范疇之內(nèi), 也有用
* 途功能,同時(shí)又具備自己的一些領(lǐng)域功能, 人們?cè)谑褂眠@些工具時(shí),可以根據(jù)實(shí)際情況選擇哪種具體
* 類(lèi)別的工具實(shí)體.
* 根據(jù)以上描述,結(jié)合本單元知識(shí)點(diǎn),設(shè)計(jì)工具抽象類(lèi)定義用途的抽象方法,在此類(lèi)的基礎(chǔ)上定義在此抽
* 象工具類(lèi)范疇內(nèi)的至少2種特殊工具的抽象類(lèi)并繼承上述的工具類(lèi) , 再根據(jù)實(shí)際使用工具的情況定
* 義更具體的工具類(lèi)實(shí)現(xiàn)對(duì)2種特殊工具類(lèi)其一的繼承, 分別實(shí)例化頂級(jí)工具類(lèi)及特殊工具類(lèi)對(duì)象,調(diào)
* 用其中功能方法, 理解領(lǐng)悟抽象類(lèi)之間的繼承及實(shí)現(xiàn)多層繼承的普通類(lèi)要注意哪些問(wèn)題.
*
* 3 繼任務(wù)2實(shí)現(xiàn), 當(dāng)我們?cè)谑褂美^承抽象父類(lèi)的時(shí)候, 我們的本意只是為使用某個(gè)抽象類(lèi)的特定方法,
* 但是受于普通類(lèi)繼承抽象類(lèi)的限制,必需實(shí)現(xiàn)所有父級(jí)抽象類(lèi)中的所有方法,既使不用那些方法也必需
* 在子類(lèi)中提供抽象方法的空實(shí)現(xiàn),如何解決這個(gè)問(wèn)題呢, 請(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í)工具類(lèi)對(duì)象,調(diào)用其中功能方法
Tool tool1 = new Traffic() {
@Override
public void constructTool() {
}
};
tool1.trafficTool();
Tool tool2 = new Construct() {
@Override
public void trafficTool() {
}
};
tool2.constructTool();
//實(shí)例化特殊工具類(lèi)對(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í)際情況選擇哪種具體
* 類(lèi)別的工具實(shí)體.
* 根據(jù)以上描述,結(jié)合本單元知識(shí)點(diǎn),設(shè)計(jì)工具抽象類(lèi)定義用途的抽象方法,在此類(lèi)的基礎(chǔ)上定義在此抽
* 象工具類(lèi)范疇內(nèi)的至少2種特殊工具的抽象類(lèi)并繼承上述的工具類(lèi) , 再根據(jù)實(shí)際使用工具的情況定
* 義更具體的工具類(lèi)實(shí)現(xiàn)對(duì)2種特殊工具類(lèi)其一的繼承, 分別實(shí)例化頂級(jí)工具類(lèi)及特殊工具類(lèi)對(duì)象,調(diào)
* 用其中功能方法, 理解領(lǐng)悟抽象類(lèi)之間的繼承及實(shí)現(xiàn)多層繼承的普通類(lèi)要注意哪些問(wèn)題.
*
* 3 繼任務(wù)2實(shí)現(xiàn), 當(dāng)我們?cè)谑褂美^承抽象父類(lèi)的時(shí)候, 我們的本意只是為使用某個(gè)抽象類(lèi)的特定方法,
* 但是受于普通類(lèi)繼承抽象類(lèi)的限制,必需實(shí)現(xiàn)所有父級(jí)抽象類(lèi)中的所有方法,既使不用那些方法也必需
* 在子類(lèi)中提供抽象方法的空實(shí)現(xiàn),如何解決這個(gè)問(wèn)題呢, 請(qǐng)?jiān)谌蝿?wù)2的基礎(chǔ)上編程實(shí)現(xiàn).
*/
package tool.abstracts;
//定義一個(gè)tool抽象類(lèi)
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í)際情況選擇哪種具體
* 類(lèi)別的工具實(shí)體.
* 根據(jù)以上描述,結(jié)合本單元知識(shí)點(diǎn),設(shè)計(jì)工具抽象類(lèi)定義用途的抽象方法,在此類(lèi)的基礎(chǔ)上定義在此抽
* 象工具類(lèi)范疇內(nèi)的至少2種特殊工具的抽象類(lèi)并繼承上述的工具類(lèi) , 再根據(jù)實(shí)際使用工具的情況定
* 義更具體的工具類(lèi)實(shí)現(xiàn)對(duì)2種特殊工具類(lèi)其一的繼承, 分別實(shí)例化頂級(jí)工具類(lèi)及特殊工具類(lèi)對(duì)象,調(diào)
* 用其中功能方法, 理解領(lǐng)悟抽象類(lèi)之間的繼承及實(shí)現(xiàn)多層繼承的普通類(lèi)要注意哪些問(wèn)題.
*
* 3 繼任務(wù)2實(shí)現(xiàn), 當(dāng)我們?cè)谑褂美^承抽象父類(lèi)的時(shí)候, 我們的本意只是為使用某個(gè)抽象類(lèi)的特定方法,
* 但是受于普通類(lèi)繼承抽象類(lèi)的限制,必需實(shí)現(xiàn)所有父級(jí)抽象類(lèi)中的所有方法,既使不用那些方法也必需
* 在子類(lèi)中提供抽象方法的空實(shí)現(xiàn),如何解決這個(gè)問(wèn)題呢, 請(qǐng)?jiān)谌蝿?wù)2的基礎(chǔ)上編程實(shí)現(xiàn).
*/
package tool.abstracts;
//定義一個(gè)交通工具抽象類(lèi)繼承自工具類(lèi)
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í)際情況選擇哪種具體
* 類(lèi)別的工具實(shí)體.
* 根據(jù)以上描述,結(jié)合本單元知識(shí)點(diǎn),設(shè)計(jì)工具抽象類(lèi)定義用途的抽象方法,在此類(lèi)的基礎(chǔ)上定義在此抽
* 象工具類(lèi)范疇內(nèi)的至少2種特殊工具的抽象類(lèi)并繼承上述的工具類(lèi) , 再根據(jù)實(shí)際使用工具的情況定
* 義更具體的工具類(lèi)實(shí)現(xiàn)對(duì)2種特殊工具類(lèi)其一的繼承, 分別實(shí)例化頂級(jí)工具類(lèi)及特殊工具類(lèi)對(duì)象,調(diào)
* 用其中功能方法, 理解領(lǐng)悟抽象類(lèi)之間的繼承及實(shí)現(xiàn)多層繼承的普通類(lèi)要注意哪些問(wèn)題.
*
* 3 繼任務(wù)2實(shí)現(xiàn), 當(dāng)我們?cè)谑褂美^承抽象父類(lèi)的時(shí)候, 我們的本意只是為使用某個(gè)抽象類(lèi)的特定方法,
* 但是受于普通類(lèi)繼承抽象類(lèi)的限制,必需實(shí)現(xiàn)所有父級(jí)抽象類(lèi)中的所有方法,既使不用那些方法也必需
* 在子類(lèi)中提供抽象方法的空實(shí)現(xiàn),如何解決這個(gè)問(wèn)題呢, 請(qǐng)?jiān)谌蝿?wù)2的基礎(chǔ)上編程實(shí)現(xiàn).
*/
package tool.abstracts;
//定義一個(gè)建筑工具抽象類(lèi)繼承自工具類(lèi)
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í)際情況選擇哪種具體
* 類(lèi)別的工具實(shí)體.
* 根據(jù)以上描述,結(jié)合本單元知識(shí)點(diǎn),設(shè)計(jì)工具抽象類(lèi)定義用途的抽象方法,在此類(lèi)的基礎(chǔ)上定義在此抽
* 象工具類(lèi)范疇內(nèi)的至少2種特殊工具的抽象類(lèi)并繼承上述的工具類(lèi) , 再根據(jù)實(shí)際使用工具的情況定
* 義更具體的工具類(lèi)實(shí)現(xiàn)對(duì)2種特殊工具類(lèi)其一的繼承, 分別實(shí)例化頂級(jí)工具類(lèi)及特殊工具類(lèi)對(duì)象,調(diào)
* 用其中功能方法, 理解領(lǐng)悟抽象類(lèi)之間的繼承及實(shí)現(xiàn)多層繼承的普通類(lèi)要注意哪些問(wèn)題.
*
* 3 繼任務(wù)2實(shí)現(xiàn), 當(dāng)我們?cè)谑褂美^承抽象父類(lèi)的時(shí)候, 我們的本意只是為使用某個(gè)抽象類(lèi)的特定方法,
* 但是受于普通類(lèi)繼承抽象類(lèi)的限制,必需實(shí)現(xiàn)所有父級(jí)抽象類(lèi)中的所有方法,既使不用那些方法也必需
* 在子類(lèi)中提供抽象方法的空實(shí)現(xiàn),如何解決這個(gè)問(wèn)題呢, 請(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è)重寫(xiě)和空實(shí)現(xiàn)
@Override
public void trafficTool() {
}
//對(duì)建筑工具方法進(jìn)行一個(gè)重寫(xiě)和空實(shí)現(xiàn)
@Override
public void constructTool() {
}
}
/**
*2 生活中很多東西都可以被人利用從而作為一種工具,這些工具都具備一個(gè)共同的功能那就是“用途”,
* 同時(shí)也有很多適合某個(gè)領(lǐng)域的工具(如,交通工具,建筑工具等 ),它們也在工具的范疇之內(nèi), 也有用
* 途功能,同時(shí)又具備自己的一些領(lǐng)域功能, 人們?cè)谑褂眠@些工具時(shí),可以根據(jù)實(shí)際情況選擇哪種具體
* 類(lèi)別的工具實(shí)體.
* 根據(jù)以上描述,結(jié)合本單元知識(shí)點(diǎn),設(shè)計(jì)工具抽象類(lèi)定義用途的抽象方法,在此類(lèi)的基礎(chǔ)上定義在此抽
* 象工具類(lèi)范疇內(nèi)的至少2種特殊工具的抽象類(lèi)并繼承上述的工具類(lèi) , 再根據(jù)實(shí)際使用工具的情況定
* 義更具體的工具類(lèi)實(shí)現(xiàn)對(duì)2種特殊工具類(lèi)其一的繼承, 分別實(shí)例化頂級(jí)工具類(lèi)及特殊工具類(lèi)對(duì)象,調(diào)
* 用其中功能方法, 理解領(lǐng)悟抽象類(lèi)之間的繼承及實(shí)現(xiàn)多層繼承的普通類(lèi)要注意哪些問(wèn)題.
*
* 3 繼任務(wù)2實(shí)現(xiàn), 當(dāng)我們?cè)谑褂美^承抽象父類(lèi)的時(shí)候, 我們的本意只是為使用某個(gè)抽象類(lèi)的特定方法,
* 但是受于普通類(lèi)繼承抽象類(lèi)的限制,必需實(shí)現(xiàn)所有父級(jí)抽象類(lèi)中的所有方法,既使不用那些方法也必需
* 在子類(lèi)中提供抽象方法的空實(shí)現(xiàn),如何解決這個(gè)問(wèn)題呢, 請(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è)重寫(xiě)和空實(shí)現(xiàn)
@Override
public void trafficTool() {
System.out.println("我是所有交通工具的集合");
}
//對(duì)建筑工具方法進(jìn)行一個(gè)重寫(xiě)和空實(shí)現(xiàn)
@Override
public void constructTool() {
}
}
/**
*2 生活中很多東西都可以被人利用從而作為一種工具,這些工具都具備一個(gè)共同的功能那就是“用途”,
* 同時(shí)也有很多適合某個(gè)領(lǐng)域的工具(如,交通工具,建筑工具等 ),它們也在工具的范疇之內(nèi), 也有用
* 途功能,同時(shí)又具備自己的一些領(lǐng)域功能, 人們?cè)谑褂眠@些工具時(shí),可以根據(jù)實(shí)際情況選擇哪種具體
* 類(lèi)別的工具實(shí)體.
* 根據(jù)以上描述,結(jié)合本單元知識(shí)點(diǎn),設(shè)計(jì)工具抽象類(lèi)定義用途的抽象方法,在此類(lèi)的基礎(chǔ)上定義在此抽
* 象工具類(lèi)范疇內(nèi)的至少2種特殊工具的抽象類(lèi)并繼承上述的工具類(lèi) , 再根據(jù)實(shí)際使用工具的情況定
* 義更具體的工具類(lèi)實(shí)現(xiàn)對(duì)2種特殊工具類(lèi)其一的繼承, 分別實(shí)例化頂級(jí)工具類(lèi)及特殊工具類(lèi)對(duì)象,調(diào)
* 用其中功能方法, 理解領(lǐng)悟抽象類(lèi)之間的繼承及實(shí)現(xiàn)多層繼承的普通類(lèi)要注意哪些問(wèn)題.
*
* 3 繼任務(wù)2實(shí)現(xiàn), 當(dāng)我們?cè)谑褂美^承抽象父類(lèi)的時(shí)候, 我們的本意只是為使用某個(gè)抽象類(lèi)的特定方法,
* 但是受于普通類(lèi)繼承抽象類(lèi)的限制,必需實(shí)現(xiàn)所有父級(jí)抽象類(lèi)中的所有方法,既使不用那些方法也必需
* 在子類(lèi)中提供抽象方法的空實(shí)現(xiàn),如何解決這個(gè)問(wèn)題呢, 請(qǐng)?jiān)谌蝿?wù)2的基礎(chǔ)上編程實(shí)現(xiàn).
*/
package tool.imp;
import tool.adaptor.TrafficAdaptor;
//定義一個(gè)普通類(lèi)并具體實(shí)現(xiàn)交通工具方法
public class Car extends TrafficAdaptor {
@Override
public void trafficTool() {
System.out.println("我是交通工具汽車(chē)");
}
}
/**
*2 生活中很多東西都可以被人利用從而作為一種工具,這些工具都具備一個(gè)共同的功能那就是“用途”,
* 同時(shí)也有很多適合某個(gè)領(lǐng)域的工具(如,交通工具,建筑工具等 ),它們也在工具的范疇之內(nèi), 也有用
* 途功能,同時(shí)又具備自己的一些領(lǐng)域功能, 人們?cè)谑褂眠@些工具時(shí),可以根據(jù)實(shí)際情況選擇哪種具體
* 類(lèi)別的工具實(shí)體.
* 根據(jù)以上描述,結(jié)合本單元知識(shí)點(diǎn),設(shè)計(jì)工具抽象類(lèi)定義用途的抽象方法,在此類(lèi)的基礎(chǔ)上定義在此抽
* 象工具類(lèi)范疇內(nèi)的至少2種特殊工具的抽象類(lèi)并繼承上述的工具類(lèi) , 再根據(jù)實(shí)際使用工具的情況定
* 義更具體的工具類(lèi)實(shí)現(xiàn)對(duì)2種特殊工具類(lèi)其一的繼承, 分別實(shí)例化頂級(jí)工具類(lèi)及特殊工具類(lèi)對(duì)象,調(diào)
* 用其中功能方法, 理解領(lǐng)悟抽象類(lèi)之間的繼承及實(shí)現(xiàn)多層繼承的普通類(lèi)要注意哪些問(wèn)題.
*
* 3 繼任務(wù)2實(shí)現(xiàn), 當(dāng)我們?cè)谑褂美^承抽象父類(lèi)的時(shí)候, 我們的本意只是為使用某個(gè)抽象類(lèi)的特定方法,
* 但是受于普通類(lèi)繼承抽象類(lèi)的限制,必需實(shí)現(xiàn)所有父級(jí)抽象類(lèi)中的所有方法,既使不用那些方法也必需
* 在子類(lèi)中提供抽象方法的空實(shí)現(xiàn),如何解決這個(gè)問(wèn)題呢, 請(qǐng)?jiān)谌蝿?wù)2的基礎(chǔ)上編程實(shí)現(xiàn).
*/
package tool.imp;
import tool.adaptor.ConstructAdaptor;
//定義一個(gè)普通類(lèi)并具體實(shí)現(xiàn)建筑工具方法
public class Hammer extends ConstructAdaptor {
@Override
public void constructTool(){
System.out.println("我是建筑工具錘子");
}
}
-----------------------------------分割線-----------------------------------
/**
* 4 在生活中,人們都會(huì)根據(jù)實(shí)際情況為完成某項(xiàng)任務(wù)而選擇利用不同的工具.
* 如我要旅行,會(huì)用到汽車(chē)或者飛機(jī),我在打印文件時(shí)會(huì)用到打印機(jī),我要學(xué)習(xí)
* java會(huì)用到筆記本電腦, 如何設(shè)計(jì)一個(gè)應(yīng)用程序定義一個(gè)人類(lèi)并在人類(lèi)中
* 定義一個(gè)使用工具的方法, 能夠讓在真正使用工具時(shí), 用什么工具則這個(gè)
* 工具就能夠出現(xiàn)在使用工具的過(guò)程中,請(qǐng)根據(jù)java語(yǔ)言繼承及多態(tài)的特點(diǎn)
* 完成此編程任務(wù).
*/
package test;
import abstracts.Tool;
import imp.*;
//定義一個(gè)主類(lèi)Test
public class Test {
public static void main(String[] args) {
//實(shí)例化Person類(lèi)
Person per = new Person();
//通過(guò)多態(tài)的方式,以父類(lèi)的類(lèi)型實(shí)例化各個(gè)子類(lèi)
Tool car = new Car();
Tool plane = new Plane();
Tool print = new Printer();
Tool laptop = new Laptop();
//調(diào)用對(duì)應(yīng)的子類(lèi)去具體實(shí)現(xiàn)抽象方法
per.useTool(car);
per.useTool(plane);
per.useTool(print);
per.useTool(laptop);
}
}
/**
* 4 在生活中,人們都會(huì)根據(jù)實(shí)際情況為完成某項(xiàng)任務(wù)而選擇利用不同的工具.
* 如我要旅行,會(huì)用到汽車(chē)或者飛機(jī),我在打印文件時(shí)會(huì)用到打印機(jī),我要學(xué)習(xí)
* java會(huì)用到筆記本電腦, 如何設(shè)計(jì)一個(gè)應(yīng)用程序定義一個(gè)人類(lèi)并在人類(lèi)中
* 定義一個(gè)使用工具的方法, 能夠讓在真正使用工具時(shí), 用什么工具則這個(gè)
* 工具就能夠出現(xiàn)在使用工具的過(guò)程中,請(qǐng)根據(jù)java語(yǔ)言繼承及多態(tài)的特點(diǎn)
* 完成此編程任務(wù).
*/
package abstracts;
//定義一個(gè)抽象的工具類(lèi)作為父類(lèi)
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ì)用到汽車(chē)或者飛機(jī),我在打印文件時(shí)會(huì)用到打印機(jī),我要學(xué)習(xí)
* java會(huì)用到筆記本電腦, 如何設(shè)計(jì)一個(gè)應(yīng)用程序定義一個(gè)人類(lèi)并在人類(lèi)中
* 定義一個(gè)使用工具的方法, 能夠讓在真正使用工具時(shí), 用什么工具則這個(gè)
* 工具就能夠出現(xiàn)在使用工具的過(guò)程中,請(qǐng)根據(jù)java語(yǔ)言繼承及多態(tài)的特點(diǎn)
* 完成此編程任務(wù).
*/
package adaptor;
import abstracts.Tool;
//定義一個(gè)適配器,繼承工具類(lèi)并提供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ì)用到汽車(chē)或者飛機(jī),我在打印文件時(shí)會(huì)用到打印機(jī),我要學(xué)習(xí)
* java會(huì)用到筆記本電腦, 如何設(shè)計(jì)一個(gè)應(yīng)用程序定義一個(gè)人類(lèi)并在人類(lèi)中
* 定義一個(gè)使用工具的方法, 能夠讓在真正使用工具時(shí), 用什么工具則這個(gè)
* 工具就能夠出現(xiàn)在使用工具的過(guò)程中,請(qǐng)根據(jù)java語(yǔ)言繼承及多態(tài)的特點(diǎn)
* 完成此編程任務(wù).
*/
package imp;
import adaptor.ToolAdaptor;
//定義一個(gè)汽車(chē)類(lèi)繼承父類(lèi)的適配器,重寫(xiě)并具體實(shí)現(xiàn)旅行的這個(gè)抽象方法
public class Car extends ToolAdaptor {
@Override
public void travel() {
System.out.println("使用汽車(chē)旅行");
}
}
/**
* 4 在生活中,人們都會(huì)根據(jù)實(shí)際情況為完成某項(xiàng)任務(wù)而選擇利用不同的工具.
* 如我要旅行,會(huì)用到汽車(chē)或者飛機(jī),我在打印文件時(shí)會(huì)用到打印機(jī),我要學(xué)習(xí)
* java會(huì)用到筆記本電腦, 如何設(shè)計(jì)一個(gè)應(yīng)用程序定義一個(gè)人類(lèi)并在人類(lèi)中
* 定義一個(gè)使用工具的方法, 能夠讓在真正使用工具時(shí), 用什么工具則這個(gè)
* 工具就能夠出現(xiàn)在使用工具的過(guò)程中,請(qǐng)根據(jù)java語(yǔ)言繼承及多態(tài)的特點(diǎn)
* 完成此編程任務(wù).
*/
package imp;
import adaptor.ToolAdaptor;
//定義一個(gè)飛機(jī)類(lèi)繼承父類(lèi)的適配器,重寫(xiě)并具體實(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ì)用到汽車(chē)或者飛機(jī),我在打印文件時(shí)會(huì)用到打印機(jī),我要學(xué)習(xí)
* java會(huì)用到筆記本電腦, 如何設(shè)計(jì)一個(gè)應(yīng)用程序定義一個(gè)人類(lèi)并在人類(lèi)中
* 定義一個(gè)使用工具的方法, 能夠讓在真正使用工具時(shí), 用什么工具則這個(gè)
* 工具就能夠出現(xiàn)在使用工具的過(guò)程中,請(qǐng)根據(jù)java語(yǔ)言繼承及多態(tài)的特點(diǎn)
* 完成此編程任務(wù).
*/
package imp;
import adaptor.ToolAdaptor;
//定義一個(gè)筆記本電腦類(lèi)繼承父類(lèi)的適配器,重寫(xiě)并具體實(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ì)用到汽車(chē)或者飛機(jī),我在打印文件時(shí)會(huì)用到打印機(jī),我要學(xué)習(xí)
* java會(huì)用到筆記本電腦, 如何設(shè)計(jì)一個(gè)應(yīng)用程序定義一個(gè)人類(lèi)并在人類(lèi)中
* 定義一個(gè)使用工具的方法, 能夠讓在真正使用工具時(shí), 用什么工具則這個(gè)
* 工具就能夠出現(xiàn)在使用工具的過(guò)程中,請(qǐng)根據(jù)java語(yǔ)言繼承及多態(tài)的特點(diǎn)
* 完成此編程任務(wù).
*/
package imp;
import adaptor.ToolAdaptor;
//定義一個(gè)打印機(jī)類(lèi)繼承父類(lèi)的適配器,重寫(xiě)并具體實(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ì)用到汽車(chē)或者飛機(jī),我在打印文件時(shí)會(huì)用到打印機(jī),我要學(xué)習(xí)
* java會(huì)用到筆記本電腦, 如何設(shè)計(jì)一個(gè)應(yīng)用程序定義一個(gè)人類(lèi)并在人類(lèi)中
* 定義一個(gè)使用工具的方法, 能夠讓在真正使用工具時(shí), 用什么工具則這個(gè)
* 工具就能夠出現(xiàn)在使用工具的過(guò)程中,請(qǐng)根據(jù)java語(yǔ)言繼承及多態(tài)的特點(diǎn)
* 完成此編程任務(wù).
*/
package imp;
import abstracts.Tool;
//定義一個(gè)Person類(lèi)
public class Person {
//定義一個(gè)使用工具的方法,接收tool抽象類(lèi)的類(lèi)型,并調(diào)用tool抽象類(lèi)的三個(gè)抽象方法
public void useTool(Tool tool){
tool.travel();
tool.print();
tool.study();
}
}
以上就是Java抽象類(lèi)、繼承及多態(tài)和適配器的實(shí)現(xiàn)的詳細(xì)內(nèi)容,更多關(guān)于java抽象類(lèi)繼承多態(tài)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
SpringBoot讀取resource目錄下文件失敗的原因及解決方案
在idea中運(yùn)行時(shí),有些resource下文件讀取工具類(lèi)能夠正常獲取讀取到文件,但是通過(guò)java–jar的方式去運(yùn)行jar包,此時(shí)resource下文件讀取工具類(lèi)讀取文件就失效了,本文就給大家介紹一下SpringBoot讀取resource目錄下文件失敗解決方案,需要的朋友可以參考下2023-08-08
Java如何通過(guò)反射機(jī)制獲取數(shù)據(jù)類(lèi)對(duì)象的屬性及方法
文章介紹了如何使用Java反射機(jī)制獲取類(lèi)對(duì)象的所有屬性及其對(duì)應(yīng)的get、set方法,以及如何通過(guò)反射機(jī)制實(shí)現(xiàn)類(lèi)對(duì)象的實(shí)例化,感興趣的朋友跟隨小編一起看看吧2025-01-01
最流行的java后臺(tái)框架spring quartz定時(shí)任務(wù)
近日項(xiàng)目開(kāi)發(fā)中需要執(zhí)行一些定時(shí)任務(wù),比如需要在每天凌晨時(shí)候,分析一次前一天的日志信息,借此機(jī)會(huì)整理了一下定時(shí)任務(wù)的幾種實(shí)現(xiàn)方式,由于項(xiàng)目采用spring框架,所以我都將結(jié)合spring框架來(lái)介紹2015-12-12
java匿名內(nèi)部類(lèi)實(shí)例簡(jiǎn)析
匿名類(lèi)是不能有名稱(chēng)的類(lèi),所以沒(méi)辦法引用它們,必須在創(chuàng)建時(shí),作為new語(yǔ)句的一部分來(lái)聲明它們,需要了解更多的可以參考本文2012-11-11
使用Spring啟動(dòng)時(shí)運(yùn)行自定義業(yè)務(wù)
這篇文章主要介紹了使用Spring啟動(dòng)時(shí)運(yùn)行自定義業(yè)務(wù)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
Java日期工具類(lèi)時(shí)間校驗(yàn)實(shí)現(xiàn)
一般項(xiàng)目中需要對(duì)入?yún)⑦M(jìn)行校驗(yàn),比如必須是一個(gè)合法的日期,本文就來(lái)介紹一下Java日期工具類(lèi)時(shí)間校驗(yàn)實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2023-12-12
Maven版本依賴(lài)pom文件內(nèi)容及使用剖析
這篇文章主要為大家介紹了Maven版本依賴(lài)pom文件內(nèi)容及使用剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05

