JavaFX教程-類與物件

梧桐雨—168發表於2008-03-18

類與物件
JavaFX中宣告類的語法:在class關鍵字後面跟著類名,接著是可選的extends關鍵字和由逗號分割的基類名列表,一個開放的大括號({),一個屬性列表,函式和操作,一個關閉的大括號(}),在大括號中間的每一個語法邏輯行都使用分號結尾。

例如:

 class Person {
  attribute name: String;
  attribute parent: Person inverse Person.children;
  attribute children: Person* inverse Person.parent;
  function getFamilyIncome(): Number;
  function getNumberOfChildren(): Number;
  operation marry(spouse: Person);
 }
屬性的宣告方式:attribute關鍵字後面跟著屬性名,一個冒號,屬性型別,可選的重數(cardinality)說明(?代表不確定,*代表零個或者更多,+代表一個或者更多),一個可選的、用來說明與類中另一屬性之間雙向關係的反向子句(inverse clause),並使用分號結束。

 attribute AttributeName : AttributeType Cardinality inverse ClassName.InverseAttributeName;
如果反向子句出現在物件屬性定義中,那麼當此屬性值被修改時JavaFX直譯器將自動更新其反向屬性(根據更新的型別和屬性的重數進行插入、刪除或者替換)。

多值屬性(例如那些使用*或者+重數描述符宣告的屬性)被表示為陣列,並能夠通過[]操作符訪問,並使用insert和delete操作符更新。

和Java方法不同,所有的JavaFX成員操作體和成員函式體都被定義在類宣告外部,例如:

 function Person.getNumberOfChildren() {
  return sizeof this.children;
 }
在類宣告中對操作和函式的宣告都需要對引數和返回值型別進行宣告,而在操作體和函式體的具體定義中則可被忽略。

 

屬性宣告
在JavaFX中可以宣告屬性的初始值。在新建物件上下文中的初始化程式按照宣告順序被逐一求值(見下例的粗體部分):

 import java.lang.System;

 class X {
  attribute a: Number;
  attribute b: Number;
 }

 attribute X.a = 10;
 attribute X.b = -1;

 var x = new X();
 System.out.println(x.a); // prints 10
 System.out.println(x.b); // prints -1
還可以通過bind操作將增量式求值表示式(incrementally evaluated expression)宣告為屬性值:

 import java.lang.System;

 class X {
  attribute a: Number;
  attribute b: Number;
  attribute c: Number;
 }

 attribute X.a = 10;

 attribute X.b = bind a + 10;
 attribute X.c = bind lazy b + 10;


 var x = new X();
 System.out.println(x.a); // prints 10
 System.out.println(x.b); // prints 20
 System.out.println(x.c); // prints 30
 x.a = 5;
 System.out.println(x.a); // prints 5
 System.out.println(x.b); // prints 15
 System.out.println(x.c); // prints 25


物件宣告
JavaFX使用由類名、用大括號包含的屬性初始化程式列表構成的說明性語法來完成物件的初始化。每個初始化程式由屬性名、冒號、定義屬性值的表示式(JavaFX也支援在上下文中進行增量式求值,詳見下面的章節)構成:

  var chris = Person {
  name: "Chris"
  children:
  [Person {
   name: "Dee"
  },
  Person {
   name: "Candice"
  }]
 };
JavaFX也支援Java物件的初始化語法。你可以象在Java中一樣傳遞引數給類構造器:

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

 var date1 = new Date(95, 4, 23); // call a java constructor
 var date2 = Date { // create the same date as an object literal
  month: 4
  date: 23
  year: 95
 };
 System.out.println(date1 == date2);  // prints true
JavaFX允許在物件中宣告本地變數。這些變數只在物件本身的範圍內可見。另外,一個引用被初始化物件的變數可以通過var關鍵字宣告為假屬性(pseudo-attribute),就如下例中的child1和child2一樣:

 var chris = Person {
  var: me
  name: "Chris"
  var child1 = Person {
   name: "Dee"
   parent: me
  }
  var child2 = Person { name: "Candice" }
  children: [child1, child2]
 };

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/13270562/viewspace-209696/,如需轉載,請註明出處,否則將追究法律責任。

相關文章