// 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()
}
}
/*******************************************************************************/
沒有留言:
張貼留言