JavaFx中文入門教程--JavaFx中的類和對象

 http://cnjavafx.cn/javafx/index.html

 

JavaFx中的類和對象
import類

JavaFx中的import跟Java中的是完全一樣的。
import 包名.類名;

import 包名.*;


import 語句應該放在程序的最開頭,在其他語句之前。JavaFx內建的類都放在javafx.*下面,不過,我們還是可以直接引入Java的包。就像這樣:
import javafx.application.*;
import java.lang.System;

package

聲明自己的包,這個語法和Java中也是完全一樣的。比如我們的用例代碼中,都聲明爲:
package example;

編譯的時候,生成的.class文件,會放在example文件夾內。
定義類

定義一個類,需要用到class關鍵字。跟Java不同的是,JavaFx支持多繼承,所以在extends後面可以出現多個基類。語法定義如下:
class 類名 [extends 基類1, 基類2...] {
    定義類屬性和類方法...
}


鑑於JavaFx支持多繼承,所以會有一些跟Java不同的規則
簡單類直接或者間接繼承於Java類
複合類肯定不是簡單類
默認情況下,JavaFx中定義的類,是複合類
類最多可以繼承一個簡單類。如果繼承於簡單類,這個類也是簡單類。一個類可以繼承任意多個複合類,或者是Java中定義的接口。

注:簡單類目前是編譯作一個Java類,複雜類編譯成爲一個Java類和一個Java接口。

定義類的時候,只有定義成public的才能被其他的腳本訪問;否則的話,只有當前腳本內可以訪問。默認是不帶public的。

JavaFx的類不支持構造函數,必須使用類初始化的方式。如果需要模擬構造函數,可以定義一個靜態方法,方法中返回一個新的實例。我們看一段腳本:classobject01.fx
package example;

import java.lang.System;
import java.util.Date;

public class PlainClass extends Date {
}

public class Fruite {
    public function ready():Boolean {
        return true;
    }
}

public class Food {
    public function ok():Boolean {
        return false;
    }
}


class Apple extends Fruite, Food {
    attribute weight:Number;
}

var a = Apple { weight: 100}

System.out.println("ready:{a.ready()}, ok:{a.ok()}, weight:{a.weight}");


我們把這個腳本編譯起來,然後解釋一下:
#javafxc classobject01.fx -d .

#javafx example.classobject01
ready:true, ok:false, weight:100.0


接下來,我們看一下example包裏面,被編譯出什麼來:
#dir example

classobject01.class
classobject01$Intf.class
classobject01$Food.class
classobject01$Food$Intf.class
classobject01$Fruite.class
classobject01$Fruite$Intf.class
classobject01$Apple.class
classobject01$Apple$Intf.class
classobject01$PlainClass.class

我們看到classobject01.fx編譯出來不少內容。首先,我們的classobject01.fx腳本對應了兩個Java Class,classobject01.class和classobject01$Intf.class,說明一個腳本被編譯成爲一個複合類,一個Java類,一個Java接口。腳本里面,有一個PlainClass,直接繼承於java.utils.Date類,根據第四項規則,java.utils.Date是一個簡單類,繼承簡單類的PlainClass也是簡單類,簡單類被編譯成爲一個Java Class,所以只有classobject01$PlainClass.class個文件。其他定義Fruite和Food,以及他們的子類Apple,都是複合類,因此都對應了兩個Java Class,一個Java類,一個Java接口。Fruite和Food是定義在JavaFx中的類,作爲複合類來對待。Apple繼承於複合類,所以也是複合類。這裏Apple用了多繼承,最後還是被編譯成兩個.class文件。
創建實例

兩種方式來創建實例,一種是用初始化,另一種是用new。
類名 { 屬性:屬性值... }
new 類名(參數,...)

比如:
var a = Apple { weight: 100};

System.out.println("ready:{a.ready()}, ok:{a.ok()}, weight:{a.weight}");

//這個是不允許的,new和初始化器不能混用
//var b = new Apple {weight:101};
var b = new Apple();
b.weight = 101;
System.out.println("ready:{b.ready()}, ok:{b.ok()}, weight:{b.weight}");


初始化器在JavaFx中比較常用,類名後面跟一個{...}。在花括號中,是一些屬性初始化,屬性名:表達式。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章