[Java] Polymorphism 多型定義

Polymorphism 又稱為多型,他的討論要在類別間有繼承關係才有意義,而他的定義很少發現有人能一次說得很清楚,所以海芋就以幾句話來帶過他。簡單來說,多型是指子類別繼承父類別時,同時改寫父類別的函式或變數,而我們可以宣告一個屬於父類別的變數,去存取子類別中改寫自父類別的函式或變數,這我們稱之為多型 Polymorphism 。

舉個生活一點的例子,若有一個父類別是動物,那麼有一個子類別鳥繼承自動物這個類別,當我們看到鳥的時侯,可以說牠是一隻鳥,也可以說牠是一隻動物。同樣的東西,卻有不同的表示型態。

舉個程式碼而言:

class Animal { 
 public int getLegs(){
 return legs;
 }
}
class Bird extends Animal{
public int getLegs() {
return legs*2;
}

public String getBirdCall() {
return birdCall;
}

public class MainProgram{
public static void main(String args[]){
Animal animal = new Bird();
animal.getLegs();
//animal.getBirdCall(); it's not ok
}
}

而在此例子中,animal是宣告給父類別,所以他只能認識父類別擁有的函式或變數,所以他能存取「getLegs()」這個函式。

而另一個要記的重點是,父類別若轉成子類別需要靠強迫轉型,子類別轉成父類別則是屬於自動轉型,而兄弟類別之類亦可以使用強迫的方式來轉型喔!

[Java] Overloading (多載) 和 Overriding (覆寫)

Overloading 和 Overriding 這兩個物件導向的名詞,常常讓人剪不斷,理還亂,可是偏偏大大小小的考試又愛考,老師在說又聽不懂,對於這兩個名詞只能說是霧裡看花。

 

但是,如果寫程式只是單單考名詞,那大概程式設計師會掛一半,因為大部份的人都是會寫程式,但不知道自己已經悄悄用到物件導向內的「觀念」,所以我就用我的認知,就 Overriding 和 Overloading 做一個簡單的區分及解說,當然如果有不對的地方,還是請各位程式設計師及專家學者們,多多指教及包涵。

 

Overloading有人將他稱為「多載」,是指說在「相同類別」中,定義「名稱相同」,但是「引數個數不同」,或是「引數型態不同」的函式,這樣JAVA就可以根據引數的個數,或是引數的型態,呼叫到對應的函式。Overriding 則是覆寫掉父類別中的函式。

 

首先,先舉例一下 Overloading,而 Overloading 就以JAVA中最常見也是最常用的 Arrays 類別為例子,引數不同,但函式名稱相同為必要條件。

static int binarySearch(byte[] a, byte key);
static int binarySearch(byte[] a, int fromIndex, int toIndex, byte key);

Read More

如何在 Windows 內安裝字型?

有些人擁有了字型光碟,卻不知道怎麼安裝字型,包括海芋一開使接觸 Windows 也一樣。儘管目前市面上的字型光碟都有很棒的安裝程式,但如果我們是從網路下載下來的免費字型,要如何安裝至 Windows 呢?這篇就以Windows XP為例,教大家如何安裝字型。

 

Step 1.
打開檔案總管,或按〔視窗鍵+E〕,並切換到「C:WINDOWSFonts」底下,或者進【控制台】,再打開【字型】即可。。

Read More

完全解析 Blogger 程式碼

從這一篇起,海芋將一連幾篇,慢慢解釋blogger的程式碼,讓您能迅速看懂並修改,而在做任何修改以前,您必須先到後台備分您的程式碼,或是開一個新的blog做實驗,另外建議使用EmEditor、PSPad、Notepad++等編輯器,以免找程式碼找到頭昏眼花喔!

 

好了,現在要開始進入程式碼的講解了,你準備好了嗎?準備好了就走吧!

 

首先,在修改大量程式碼之前,您必須做的一件事,就是將要修改的地方註解起來,萬一改壞了,您可以再還原回去,而在JavaScript和CSS中,註解有兩種型態,分別如下:

/*我是註解*/
//我是註解

其中,「我是註解」為讓您加上註解的部份。

但是,在HTML中,註解就不是這麼回事了,HTML的註解為以下的型態,相信眼尖的您,一定有發現那裡不一樣了吧!

<!-- 我是註解 -->

 

在聊完註解之後,接下來我們就要開始進入Template的部份了。而在此,海芋是以Blogger所提供的Template來講解。

 

首先,網頁的組成分為兩大部份,一個是頭,一個是身體,頭就是我們所謂的<head>,身體就是所謂的<body>,這些通通稱為網頁的標記(Tags),在頭的部份,包含了一開始就要執行的程式碼,身體則是包含了要提供給讀者的資訊,如果您對這些名詞很陌生,不妨先去找一下相關的HTML書籍觀看。

 

而在<head>中,有一個<title>的欄位,則是提供了這個網站的名稱,即在瀏覽器上會顯示的名稱,而在這裡,Blogger是用以下的程式碼來包裝。

<title><data:blog.pageTitle/></title>

 

其中,<data:blog.pageTitle/>所代表的意義為您在後台所設定的網誌名稱。

 

聊完了<title>之後,接著我們看到<b:skin>的項目,這到底是什麼呢?在這裡海芋偷偷告訴您一個小技巧,您可以將b看為blogger,skin很直覺地翻譯,即是皮膚、外皮,所以他就是blogger的外表,而這裡面確實也定義了許多的CSS,我們就簡單舉一下例子好了。

<Variable name="bgColor" description="Page Background Color" type="color" default="#efefef" value="#efefef">

 

其中他有幾個變數,blogger help分別描述如下:

  • name: 此名稱只能包含字母或數字,而且範本中的每一個名稱必須是獨一無二的
  • description – 可以是較具描述性的名稱,且可包含空格。 此變數會出現在 [字型和顏色] 標籤中。
  • type: 可以是「字型」或「顏色」,字型即為「font」,顏色即為「color」,另外也可以為自動,如「automatic」。
  • default: 預設值。 針對顏色,此變數應包含十六進位顏色代碼,例如 #FF0066。 針對字型,此變數會是 font-tyle font-weight font-size font-family 格式的清單。
  • value:為您對這個屬性所設定的值。

 

而這些值,被<Variable>包夾起來,即定義了一個名稱為「$name」的變數。以上例而言,我們定義了「bgColor」這個變數,他的值為「#efefef」,型態為「顏色」,而我們該如何存取這個值呢?

 

在Blogger中,亦提供了像PHP存取變數的方式,只要在存取變數的前面,加上「$」這個符號,即可存取了,以一段小程式而言:

body {
background: $bgColor;
margin: 0;
padding: 0px;
font: x-small Verdana, Arial;
text-align: center;
color: $textColor;
font-size/* */:/**/small;
font-size: /**/small;
}

 

而這段為CSS的程式碼,他亦必須包含在中。

 

好了,大概講完頭部的東西了,接下來的文章,海芋將再慢慢介紹給你其它的項目,敬請鎖定喔!

[PHP] include_once 和 require_once

include_once 和 require_once都是PHP的函式,主要是要包含其它的檔案進來,而且萬一該檔案被包含過了,則不會重新再包含一次。

而基於PHP不可能開發同一個函式的情況下,去試了一下他的不同之處,在於include_once萬一遇到錯誤,則會持續執行,但require_once則會停止執行,並產生Fatal Errors。

以程式碼說明如下:

檔名:test.php

<?php
  require_once("a.php");
  require_once("c.php");
  echo dirname(__FILE__)." in test.php\n";
?>

 

檔名:a.php

<?php
  echo dirname(__FILE__)." in a.php"."</br>";
  require_once("b.php");
?>

 

檔名:b.php

<?php
  echo dirname(__FILE__)." in b.php"."</br>";
?>

 

Read More

[Java] 將浮點數和整數數值轉為字串

前面分別講過如何將字串轉為浮點數和整數,而這一篇則是介紹如何反其道而行,將浮點數和整數數值轉為字串。

首先,我們分別看到Integer、Float、Double三個Class中,都有一個method,叫做「toString()」,而我們來看他的函式原型。

public static String toString()

而這個類別的用法也很簡單,也是同樣用一個範例來說明,Integer和Float的用法則也是類似。

 double a = 123.456;
Double.toString(a);

Read More

[Java] 將字串轉成浮點數型態

所謂的浮點數型態,在這裡指的是 Float 和 Double 的型態,而前面海芋曾經介紹過如何將字串轉換成整數型態,在這裡海芋將介紹如何轉成浮點數型態。

 

首先,我們先去介紹 Double類別和 Float 類別底下的兩個 method。

public static float parseFloat(String s) throws NumberFormatException
public static double parseDouble(String s) throws NumberFormatException

 

接下來,以程式碼介紹如何使用,以轉成 Float 和 Double 為例。

 

1.轉成 Float 型態

float test = 0;
 String strFloat = "123.4"
 try{
   float = Float.parseFloat(strFloat);
 }catch(NumberFormatException e){
   System.out.println("浮點數轉換錯誤");
 }

 

2.轉成 Double 型態

 double test = 0;
 String strDouble = "123.4"
 try{
   test = Double.parseDouble(strDouble);
 }catch(NumberFormatException e){
   System.out.println("浮點數轉換錯誤");
 }

[Java] 什麼是 Static 靜態類別、變數呢?

這是海芋最近碰到的一個小問題,為什麼在同一個類別中,Static Method 不能存取 Non-Static Method 呢?於是海芋就想啊想的,加上翻了一下資料,終於恍然大悟,就把他寫下來,避免將來忘記。

 

就程式語言的變數、類別來說,分為 Static 和 Non-Static 分為兩種不同的型態,則 Java 大概可以分為四種資料成員,分別為「class field」、「class method」、「instance filed」、「instance method」,而這麼多的型態,我們該如何去分辨呢?

 

在Java中,你可以把 Static 看成是類別所擁有的,而且是一開始就放置於記憶體中的,而 Instance 則是伴隨著物件產生而產生的。

所以,如果我們有下列片段程式碼:

public class CD
{
    public static double PI = Math.PI;
    public double area = 0;
    public CD()
    {
      .........
    }
}

 

 

而這段程式碼之中,因為PI這個變數是宣告為 Static 的,所以他是屬於 CD 類別,因此若您要在別的類別存取他,只要使用「CD.PI」即可,其中「CD為類別名稱」、「PI則為變數名稱」。
Read More

[Java] 如何將字串轉成數字?

在 [Java] 將字元轉成數字 一文中,海芋曾經介紹過如何將字元轉換成數字,然而,今天在此要教的是如何把字串轉為數字。

或許您不知道,String是一個類別,所以當您宣告字串的時侯,同時也建立了一個類別變數。而在Interger類別底下,有一個parseInt的方法,可以讓您輕鬆地字串轉為整數。

public static int parseInt(String s,int radix);
public static int parseInt(String s);

其中radix代表的是基數。

而這要怎麼用呢?其實用法非常簡單,在這裡舉兩個例子來說明。

例子1:

String input = "10";
int afterConvert = Integer.parseInt(input);

 

在例子1中,我們並沒有使用到 radix 的引數,所以 Java 將輸入的字串視為 10 進位,也因此 afterConvert 的答案為10。
Read More

[Java] 將字元轉成數字

在Java中,若要要將數字字元,即0~9轉成整數型態,若用強制型別轉換,因為數字字元的ascii碼是從48開始,所以會產生錯誤。

而我們要解決這個困難,則有兩種方法可以實做,一種是靠JAVA的Character類別所提供的方法,另一種則是靠我們手動寫程式。

先說手動寫程式法吧,我們只要寫下面的程式碼就可以了

 int num = '數字字元'- '0';

其中數字字元表示 0~9。

而第二種方法則是使用Character類別中的getNumericValue方法,用法如下:

public static int getNumericValue(char ch);
public static int getNumericValue(int codePoint)

其中ch為要轉換的字元。
Read More