簡單來說:在繼承關係之下,透過父類別的類別變數執行子類別的method。
定義:在執行程式,物件能夠依照不同情況變換資料型態。換句話說,多型是指一個類別參考可以在不同環境下,扮演不同角色的特性,指向不同的物件實體,可透過實作多個繼承或介面來實現父類別,並使用Override或Overload來達成。
物件在執行時會依據指向的物件實體類型來呼叫對應方法。前提:子類別必須改寫(override)父類別的方法。
JVM在執行階段可以確認每個物件的實際類型,並呼叫對應方法。
使用多型是為了避免轉型。
作法:
用父類別宣告一個類別變數
這個類別變數用子類別來(new)建立物件
結論,構成多型的三要素,缺一不可:
1.類別要有繼承
2.類別要改寫父類別的方法
3.父類別調用指向子類別的物件
對於java來說,應該呼叫哪一個方法來執行,與變數本身所屬類別無關,而是跟物件本身所屬類別有關。
寫程式就像學音樂一樣,只看樂譜不動手永遠無法演奏出美妙旋律。只演奏一遍也不可能立刻成為音樂家。 這部落格紀錄我的學習筆記,各位看倌若找不到需要的資料請見諒~~~ This blog records my study about Computer Science.
總網頁瀏覽量
2013年2月27日 星期三
2013年2月26日 星期二
super用法
super:執行程式時一個物件,指向該物件的父類別。
一、子類別在建構子中初始化時用super();呼叫父類別建構子初始化
例如:
class Human{
public Human(){
System.out.println("Hahaha");
}
public void say(){
System.out.println("Catch a murderer");
}
}
class Detective extends Human{//繼承Human
public Detective(){
super();
/*
super指向Human物件,在這裡用super呼叫Human建構子。
這邊不寫super,系統會默默地在第一行自動補上super。所以在建立subclass物件時會呼叫superclass建構子做初始化。super必須寫在建構子的第一行,如果不寫在第一行,那麼編譯階段,物件初始化時系統會自動在建構子第一行補上super()做初始化,之後又碰上開發者自己加入的super()又一次初始化就會產生error。
*/
}
@override
public void say(){
System.out.println("Yout are the murderer");
}
public void catchmurderer(){
super.say();
}
}
public class mypractice {
public static void main(String[] args) {
Detective conan = new Detective();
conan.catchmurderder();
}
}
子類別建立物件會先呼叫父類別的建構子初始化
由上面例子Detective建立conan物件時會呼叫Human類別的建構子做初始。
其實這樣設計也符合邏輯
子類別繼承自父類別的成員函數與成員變數
兒子擁有老爸一些特徵,這些特徵在老爸出生時就決定了。
兒子出生時老爸的特徵一定先出現。
在java世界裡所有的類別都是繼承自Object這個類別
因此所有的類別宣告建構子時候,系統都會默默地補上super();
去呼叫Object的建構子做初始化。
本篇例子:Detective建立物件時會(Detictive→Human→Object)層層遞迴呼叫父類別建構子做初始化。先在Object建構子初始化,接著在Human建構子初始化,最後是在Detective初始化。
二、子類別改寫(override)父類別的method或variable後,要使用父類別的method或variable時,就用super.method();呼叫父類別的method
一、子類別在建構子中初始化時用super();呼叫父類別建構子初始化
例如:
class Human{
public Human(){
System.out.println("Hahaha");
}
public void say(){
System.out.println("Catch a murderer");
}
}
class Detective extends Human{//繼承Human
public Detective(){
super();
/*
super指向Human物件,在這裡用super呼叫Human建構子。
這邊不寫super,系統會默默地在第一行自動補上super。所以在建立subclass物件時會呼叫superclass建構子做初始化。super必須寫在建構子的第一行,如果不寫在第一行,那麼編譯階段,物件初始化時系統會自動在建構子第一行補上super()做初始化,之後又碰上開發者自己加入的super()又一次初始化就會產生error。
*/
}
@override
public void say(){
System.out.println("Yout are the murderer");
}
public void catchmurderer(){
super.say();
}
}
public class mypractice {
public static void main(String[] args) {
Detective conan = new Detective();
conan.catchmurderder();
}
}
子類別建立物件會先呼叫父類別的建構子初始化
由上面例子Detective建立conan物件時會呼叫Human類別的建構子做初始。
其實這樣設計也符合邏輯
子類別繼承自父類別的成員函數與成員變數
兒子擁有老爸一些特徵,這些特徵在老爸出生時就決定了。
兒子出生時老爸的特徵一定先出現。
在java世界裡所有的類別都是繼承自Object這個類別
因此所有的類別宣告建構子時候,系統都會默默地補上super();
去呼叫Object的建構子做初始化。
本篇例子:Detective建立物件時會(Detictive→Human→Object)層層遞迴呼叫父類別建構子做初始化。先在Object建構子初始化,接著在Human建構子初始化,最後是在Detective初始化。
二、子類別改寫(override)父類別的method或variable後,要使用父類別的method或variable時,就用super.method();呼叫父類別的method
2013年2月24日 星期日
在inhon g1手機跑自己開發的程式
作業系統:win7
本篇是設定在Inhon g1手機跑自己用eclipse的程式
首先準備好自己打的程式
一、設定手機
1.系統設定→開發人員選項→將USB偵錯打勾
2.將手機插上電腦
二、設定電腦
1.去android sdk manage安裝use driver
2.下載inhon gi驅動程式 MT65XX好像是聯發科設計的??
MT65xx android phone
(去網路找吧)
3.去裝置管理員安裝驅動程式(youtube 有安裝驅動程式影片教學)
4.想要跑的project點下右鍵→Run as →Run configuration
→左邊選單點下android application→右邊的target頁面選lunch on all compatible devices→在android頁面打上project名稱
5.試著run看看
PS:
檢查電腦有沒有偵測到手機
打開命令提示字元,去sdk目錄底下的platform-tool
打上adb devices
如果螢幕上有出現裝置編號(型號)那麼就安裝成功
也可以打開eclipse:
然後上面一排工具選項點選window→show view→other→新增devices
,畫面下方有devices的資訊,若有手機型號那麼就安裝成功了
linux安裝法:
一、設定手機
1.系統設定→開發人員選項→將USB偵錯打勾
2.將手機插上電腦
二、
在終端機切換到sdk的platfom-tool之下
sudo ./adb kill-server
sudo ./adb start-server
記得要以root權限操作
如此以來在linux安裝就完成
本篇是設定在Inhon g1手機跑自己用eclipse的程式
首先準備好自己打的程式
一、設定手機
1.系統設定→開發人員選項→將USB偵錯打勾
2.將手機插上電腦
二、設定電腦
1.去android sdk manage安裝use driver
2.下載inhon gi驅動程式 MT65XX好像是聯發科設計的??
MT65xx android phone
(去網路找吧)
3.去裝置管理員安裝驅動程式(youtube 有安裝驅動程式影片教學)
4.想要跑的project點下右鍵→Run as →Run configuration
→左邊選單點下android application→右邊的target頁面選lunch on all compatible devices→在android頁面打上project名稱
5.試著run看看
PS:
檢查電腦有沒有偵測到手機
打開命令提示字元,去sdk目錄底下的platform-tool
打上adb devices
如果螢幕上有出現裝置編號(型號)那麼就安裝成功
也可以打開eclipse:
然後上面一排工具選項點選window→show view→other→新增devices
,畫面下方有devices的資訊,若有手機型號那麼就安裝成功了
linux安裝法:
一、設定手機
1.系統設定→開發人員選項→將USB偵錯打勾
2.將手機插上電腦
二、
在終端機切換到sdk的platfom-tool之下
sudo ./adb kill-server
sudo ./adb start-server
記得要以root權限操作
如此以來在linux安裝就完成
android 更新sdk之後出現please update ADT to the latest version的解決方法
修改sdk\tools\lib\plugin.pro
將版本編號改成更新前的版本編號
2013年2月22日 星期五
ASP連結資料庫
資料哭與ASP.net連線
新增一個資料集,拉TableAdapter(表格配接器)。
1.
TableAdapter:連線到資料庫,針對開發系統需求撈出資料產生資料集。
2.
更改TableAdapter的屬性Name,可以用他的Name在C#作類別變數宣告
3.
我們在C#裡面,用程式將資料顯示在gridview上。
主要架構
在C#程式碼中。
DrinkDataSet ds;//宣告在page_load之外
在page_load中
ds = new DrinkDataSet();//建立物件並初始化
DrinkDataSetTableAdapters.DrinkTableAdapter drink_da = new DrinkDataSetTableAdapters.DrinkTableAdapter();//宣告資料表單配接器,
drink_da.Fill(ds.Drink);//將資料配接器倒入資料集
GridView1.DataSource = ds.Drink;//DataSource是物件,指定GridView資料獲取的對象
GridView1.DataBind();//資料綁定,將table輸出在gridview
//上面兩行相當於GridView1.DataSourceID="NorthwindSqlDataSource"
}
設定分頁:
1.將gridview的屬性allow paging設定成true
2.這時按下分頁會發生"找不到PageIndexChanging事件"錯誤訊息。(我想是因為按下分頁索引觸發PageIndexChanging事件,而C#找不到相對應的method)因此要在事件表單單的PageIndexChanging點兩下,C#出現PageIndexChanging的method。
3.雖然已經藤上去PageIndexChangeing的method,
但是點下分頁索引時gridview仍不會跳頁,因為我們沒告訴gridview該跳頁了,他頁數索引一直停留在第一頁。
因此
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView1.PageIndex = e.NewPageIndex;
//更新GridView的PageIndex(頁數),將換頁事件的頁數給gridview的頁數。
GridView1.DataBind();//資料綁定,其實不綁定好像也可以秀出頁面,目前好像沒有bug
//e是換頁事件,是一個物件,將他轉成字串印出來是System.Web.UI.WebControls.GridViewPageEventArgs
}
設定分頁:
1.將gridview的屬性allow paging設定成true
2.這時按下分頁會發生"找不到PageIndexChanging事件"錯誤訊息。(我想是因為按下分頁索引觸發PageIndexChanging事件,而C#找不到相對應的method)因此要在事件表單單的PageIndexChanging點兩下,C#出現PageIndexChanging的method。
3.雖然已經藤上去PageIndexChangeing的method,
但是點下分頁索引時gridview仍不會跳頁,因為我們沒告訴gridview該跳頁了,他頁數索引一直停留在第一頁。
因此
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView1.PageIndex = e.NewPageIndex;
//更新GridView的PageIndex(頁數),將換頁事件的頁數給gridview的頁數。
GridView1.DataBind();//資料綁定,其實不綁定好像也可以秀出頁面,目前好像沒有bug
//e是換頁事件,是一個物件,將他轉成字串印出來是System.Web.UI.WebControls.GridViewPageEventArgs
}
由 GridView 'GridView1' 引發但尚未處理的事件 RowCancelingEdit。
2013年2月21日 星期四
2013年2月19日 星期二
Eclipse快捷鍵技巧與密技
"Alt"+"/"
自動補齊函式名稱功能,如果沒有自動補齊那就非常可能前面程式某個地方寫錯或漏寫。
"Ctrl"+"Shift"+"o"
自動import類別功能。
加入程式碼行號
在程式編輯視窗左邊灰色邊框按下滑鼠右鍵→show line numbers
設定多個中斷點執行程式時
按F8可以一步步執行中斷點下方的程式碼
ctrl+/
多行註解
ctrl+h
搜尋
執行插入引數 或給指令
run configuration→arguments
program arguments:是給main method引數
VM arguments:是給JVM的指令 例如:設定系統屬性、classpath
自動補齊函式名稱功能,如果沒有自動補齊那就非常可能前面程式某個地方寫錯或漏寫。
"Ctrl"+"Shift"+"o"
自動import類別功能。
加入程式碼行號
在程式編輯視窗左邊灰色邊框按下滑鼠右鍵→show line numbers
設定多個中斷點執行程式時
按F8可以一步步執行中斷點下方的程式碼
ctrl+/
多行註解
ctrl+h
搜尋
執行插入引數 或給指令
run configuration→arguments
program arguments:是給main method引數
VM arguments:是給JVM的指令 例如:設定系統屬性、classpath
訂閱:
文章 (Atom)
