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中比较常用,类名后面跟一个{...}。在花括号中,是一些属性初始化,属性名:表达式。

 

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