JavaFX教程-类与对象

类与对象
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/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/13270562/viewspace-209696/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值