2015年9月7日 星期一

JAVA SL-110_08/23

// InterfaceMember.java

interface Surfacing{
        double pi=3.14159;
        double area();
}

class Shap{
        protected double x, y;
        Shap(double x, double y){
                this.x = x;
                this.y = y;
        }

        public String toString(){
                return "圖形原點:("+ x +", " + y + ")";
        }
}

class Ccircle extends Shap implements Surfacing{
        private double r;
        public Ccircle(double x, double y, double r){
                super(x,y);
                this.r = r;
        }

        public double area(){
                return pi * r * r;
        }

        public String toString(){
                return "圓心:(" + x + "," + y + "),半徑:" + r + ",面積:" + area();
        }
}

public class InterfaceMember{
        public static void main(String args[]){
        Ccircle c = new Ccircle(3, 5, 6);
        System.out.println(c.toString());
        System.out.println("圓周率:" + c.pi);
        System.out.println("圓周率:" + Surfacing.pi); // interface不需建立實體也能執行
        }
}

/*******************************************************************************/

姓名中翻英:http://c2e.ezbox.idv.tw/name.php
Kai-Lin Liao

地址中翻英:http://www.post.gov.tw/post/internet/SearchZone/index.jsp?ID=130112
7F., No.6, Ln. 75, Zhonghua Rd., Sanxia Dist., New Taipei City 237, Taiwan (R.O.C.)

VUE 辦帳號:http://www.vue.com/oracle/
Oracle 辦帳號:https://login.oracle.com/mysso/signon.jsp

/*******************************************************************************/
.抽象類別:
是為了讓方法的使用更多樣化,若父類別是一個抽象類別,
其所產生的抽象方法都必須由子類別來加以實作,
如果沒有全部實作則子類別也要宣告成抽象類別。

abstract class 類別名稱

抽象方法的宣告(不可以是 static)

abstract 傳回值 方法名稱(參數列);

存取權限不可以是 private,沒有抽象建構子和屬性。

.如何實作抽象類別
利用 extends 關鍵字
子類別透過 override 父類別的方法
/*******************************************************************************/
.介面
只能有無實作的方法
void show();

.抽象類別
可以有一般的方法和抽象方法
abstract void  show();
void show(){System.out.println();};

.一般類別
只能有一般方法
void show(){System.out.println();};
/*******************************************************************************/


// LineShow.java

abstract class LineDemo{                // 宣告抽象類別
        private int length;

        LineDemo(int length){
                this.length = length;
        }

        abstract double area();         // 抽象方法

        int getlength(){                // 一般方法
                return length;
        }
}

public class LineShow extends LineDemo{
        LineShow(int length){
                super(length);
        }

        public static void main(String args[]){
                LineShow s = new LineShow(10);
                System.out.println("area = " + s.area());

                // 因為 length 是 private 權限,要印出必須透過 getlength()
                System.out.println("length = " + s.getlength);
        }

        public double area(){                           // 實作 LineDemo 的 area();
                return Math.pow(getlength(),2);         // Math.pow(n, a) -> n^a
        }
}
/*******************************************************************************/
.enum 列舉
列舉就十南一種類別,可以單獨撰寫,也可以在類別內當成內部類別。

存取權限 (static) enum 列舉名稱{
A, B, …..}

列舉的內容值都是經過 public, static, final 的修飾。
列舉的內容一經初始給定後就無法更改。

public enum week{…}
/*******************************************************************************/
//.列舉練習,分兩個檔案來寫:Week.java、WeekEnum.java
/*--------------------------------------------------------------------------------------------------*/
// Week.java

public enum Week{
        Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday}
/*--------------------------------------------------------------------------------------------------*/
// WeekEnum.java

public class WeekEnum{
        public static void play(Week week){
                switch(week){
                        case Sunday:
                                System.out.println("Sunday");
                                break;
                        case Monday:
                                System.out.println("Monday");
                                break;
                        case Tuesday:
                                System.out.println("Tuesday");
                                break;
                        case Wednesday:
                                System.out.println("Wednesday");
                                break;
                        case Thursday:
                                System.out.println("Thursday");
                                break;
                        case Friday:
                                System.out.println("Friday");
                                break;
                        case Saturday:
                                System.out.println("Saturday");
                                break;
                        default:
                                System.out.println("DEFAULT");
                }
        }

        public static void main(String args[]){
                play(Week.Sunday);
                play(Week.Monday);
        }
}
/*******************************************************************************/


.取得列舉內容的方式
透過-運算子
透過-參照
Week week = new Week();
System.out.println(week.Sunday);

透過 value()
Week[] week2 = Week.values();
for(int i=0; i<week2.length;i++){
System.out.println(week2[i] + “, ”);
// 或
for(Week w:Week Values())
System.out.println(w + “, “);

利用 valueOf(String s)來取得
System.out.println(Week.valueOf(“Sunday”));

/*******************************************************************************/
// 實作練習 Enum 各取得內容方法
// 需要保留前一練習的檔案 Week.java
// WeekEnum2.java

public class WeekEnum2{
        public static void main(String args[]){
                System.out.println("=========方法2:透過參照=========");
                Week week = Week.Sunday;
                System.out.println(week.Sunday);

                System.out.println("=========方法3-1:透過 value() / for 迴圈=========");
                Week[] week2 = Week.values();
                for(int i=0; i<week2.length; i++)
                        System.out.println(week2[i] + ", ");

                System.out.println("=========方法3-2:透過 value() / for-each=========");
                for(Week w:Week.values())
                        System.out.println(w + ", ");

                System.out.println("=======方法4-1:利用 valueOf(String s)來取得=======");
                System.out.println(Week.valueOf("Sunday"));

                System.out.println("=======方法4-2:利用 valueOf(String s)來取得=======");
                System.out.println(Week.valueOf(Week.class, "Sunday"));
        }
}
/*******************************************************************************/

.內部類別 InnerClass
一般內部類別
方法內部類別
匿名內部類別
靜態內部類別

MyOuter$MyInner$MyInnerAgain.class
( $ 代表階層概念 )

class MyOuter{
class MyInner{ //內部類別
class MyinnerAgain{
foo(){} // 次內部類別
}
}
class MyInner2{ //內部類別

}
class MyInner3{ //內部類別

}
}
/*******************************************************************************/
// 練習 InnerClass:MyOuterDemo.java
class MyOuter{
        class MyInner{
                public void foo(){
                        System.out.println("MyInner foo()");
                }
        }
}
public class MyOuterDemo{
        public static void main(String args[]){
                System.out.println("===== 方法一 ========");
                MyOuter t = new MyOuter();
                MyOuter.MyInner t1 = t.new MyInner();
                t1.foo();

                System.out.println("===== 方法二 ========");
                MyOuter.MyInner t3 = new MyOuter().new MyInner();
                t3.foo();

                System.out.println("===== 方法三 ========");
                new MyOuter().new MyInner().foo();
        }
}
/*******************************************************************************/
// InnerClassDemo.java

class MyOuter{
        private static int sx=9;
        private int x=7;

        class MyInner{
                private int x=77;
                public void foo(){
                        int x=777;
                        System.out.println("Local x =" + x);
//無法印出        //System.out.println("MyInner x=" + MyInner().x);
                        System.out.println("MyInner x =" + this.x);
                        System.out.println("MyOuter x =" + MyOuter.this.x);
//無法印出        //System.out.println("MyOuter x=" + MyOuter.x);
                        System.out.println("MyOuter sx =" + sx);
                        System.out.println("MyOuter sx =" + MyOuter.sx);

                }
        }
}

public class InnerClassDemo{
        public static void main(String args[]){
                new MyOuter().new MyInner().foo();
        }
}
/*******************************************************************************/
// CboxDemo.java

class Cbox{
        private int height, width, length;
        private Color cr;

        Cbox(int height, int width, int length, String str){
                this.height = height;
                this.width = width;
                this.length = length;
                cr = new Color(str);
        }

        void show(){
                System.out.println("area = " + height*width*length);
                cr.show_color();
        }

        class Color{                    // innerclass
                private String color;

                Color(String color){
                        this.color=color;
                }

                void show_color(){
                        System.out.println("color = " + color);
                }
        }
}

public class CboxDemo{
        public static void main(String args[]){
                Cbox b = new Cbox(3,5,8,"blue");
                b.show();
        }
}
/*******************************************************************************/
/* 練習 InnerClass 技巧,並印出:
STUST公司員工資料
-------------------------
姓名:KLin
-------------------------
地址:Taiwan
-------------------------
行動電話:0912345678
-------------------------
電話號碼:06543210
*/
// ShowInner.java

class businessCard{
        private company c;
        private employee e;

        businessCard(String company, String name, String address, String mobile, String tel){
                c = new company(company);
                e = new employee(name, address, mobile, tel);
        }

        void show(){
                c.show_company();
                e.show_employee();
        }

        void separator(){
                System.out.println("-------------------------");
        }

        class employee{
                private String name, address, mobile, tel;
                employee(String n, String a, String m, String t){
                        name=n;
                        address=a;
                        mobile=m;
                        tel=t;
                }
                void show_employee(){
                        System.out.println("姓名:"+name);
                        separator();
                        System.out.println("地址:"+address);
                        separator();
                        System.out.println("行動電話:"+mobile);
                        separator();
                        System.out.println("電話號碼:"+tel);

                }
        }

        class company{
                private String myCompany;
                company(String myCompany){
                        this.myCompany = myCompany;
                }
                void show_company(){
                        System.out.println(myCompany + "公司員工資料");
                        separator();
                }
        }
}

public class ShowInner{
        public static void main(String arga[]){
                new businessCard("STUST", "KLin", "Taiwan","0912345678", "06543210").show();
        }
}
/*******************************************************************************/

.方法內部類別:在方法中宣告的類別。
/*******************************************************************************/
// MethodInnerClass.java

public class MethodInnerClass{
        public static void main(String args[]){
                new MethodInnerClass().see();
        }
        void see(){
                class MyInner{
                        void foo(){
                                System.out.println("MethodInnerClass foo");
                        }
                }
                MyInner mi = new MyInner(); // 注意必須建立 MyInner 實體
                mi.foo(); // 才能印出 foo()
        }
}













沒有留言:

張貼留言