顯示具有 Class 標籤的文章。 顯示所有文章
顯示具有 Class 標籤的文章。 顯示所有文章

2014年4月16日 星期三

Java Class 的名稱必須與其檔案名稱一致嗎?

Java Class 的名稱必須與其檔案名稱一致嗎?不需要!但,最好命名一致,方便日後管理。

例如:新增檔案 ATest.java,編寫程式如下:

class A{
   public static void main(String[] args){
      System.out.println("Hello,World");
   }
}

直行後,檢查發現執行的目錄下,除了 ATest.java 檔案外,還新增一個編譯過後的檔案 A.class
$ ls -l
total 16
-rw-r--r--  1 elvismeng  staff  404  4  3 11:05 A.class
-rw-r--r--  1 elvismeng  staff   93  4  3 11:05 ATest.java

抽象類別與方法

定義:

僅宣告方法名稱,而不實作,此方法稱為「抽象方法」(abstract method)。 包含抽象方法的類別,稱為「抽象類別」。

限制:

1. 抽象類別與一般類別不同,抽象類別不能拿來直接產生物件
2. 抽象類別內部的沒有定義處理方法,因此繼承到子類別之後要加以明確定義,也就是加以改寫(overloading)
3. 不可對抽象類別方法指定為 final、static、private,因為子類別無法改寫


語法:

使用修飾詞 abstract 去定義抽象類別及抽象方法
   abstract class 類別名稱 {
      宣告 field;
      abstract 傳回值資料型態  method 名稱 (參數 ...)
   }


用法:

一般宣告抽象父類別的型態 Data Type 的變數,去參照其子類別的實體物件

Tips 小常識:

以 instanceof 運算子,偵測子物件所屬的類別

類別檔: Circle.java
public abstract class Circle {
 protected double r;

 public Circle(double r) { this.r = r; }
 public double getR() { return r; }
 public abstract void draw();
}
類別檔: SolidCircle.java
public class SolidCircle extends Circle {
        public SolidCircle(double r) { super(r); } 
 public void draw() {
  System.out.println("Radius of Solid Circle :" + getR());
 }
}
類別檔: DotCircle.java
public class DotCircle extends Circle {
 public DotCircle(double r){ super(r); }
 public void draw() {
  System.out.println("Radius of Dot Circle :" + getR());
 }
}
類別檔: CircleTest.java
public class CircleTest {
 public static void main(String[] args) {
  Circle p = new SolidCircle(5.0);
  if (p instanceof SolidCircle) {
   System.out.println("這物件是 SolidCircle 類別 ");
   p.draw();
  }
  
  p = new DotCircle(10.0);
  if (p instanceof DotCircle) {
   System.out.println("這物件是 DotCircle 類別 ");
   p.draw();
  }
 }
}
執行結果:

2014年4月10日 星期四

匿名內部類別 Anonymous Inner Class

定義

匿名內部類別是一個沒有名稱的內部類別

語法

   new SuperType (constructor parameters) {
      // 定義匿名類別的資料和方法
   }



用法

要利用內部類別來做事件 event 處理的話,以使用匿名內部類別較為方便

class A {
 
 A() {
  (new B () {
        public void printB() {
    System.out.println("Hello World"); 
        }
            }).printB();
 }
}

class B { }

public class AnonymousInnerTest1 {
 public static void main(String[] args) {
  A obj = new A();
 }
}
執行結果