Course note: Encapsulation(private),toString(),static keyword,final keyword,Enumeration(作业中用法),UML

()Encapsulation

The instance data of an object should be modified only by that object.(An object should be encapsulated from the rest of
the system.)

需用如下方法才能 调用或修改 private data:

The names of accessor and mutator methods can usually take the form getX and setX, respectively, where X is the name of the value. E.g. getName, setName methods could be used to access and change the variable called name inside an
object。

 

Visibility modifiers

The effects of public and private visibility
 

 

使用private关键字:

注意:若使用该方法,则不需要再用construct进行初始化!

每个成员变量对应一对getter 和 setter(注意布尔类型变量的getter为is)才能访问和修改成员变量。

在其它class里面通过以上方法访问这个Demo类:

自动生成:

Eclips环境:

代码的空白处点右键,或者在Person类名上点右键 —> Source –> Generate Getters and Setters(或直接从菜单进入)

如果是constructor:

空白处点右键,或者在类名上点右键 —> Source –> Generate Constructor using Fields

IDE环境:

也可用于写constructor

 

 

toString() method
 

When we wanna print out a object("p1"):

Java will converts the Person object p1 to a String using a special method toString(), which means:

Java will print:

(返回类名+@+哈希值的16进制形式)

 

以上是没有经过重写(override)直接输出对象student_object3的情况。

 

实践中为了方便,我们可以根据需要在被调用的类中重写toString()方法,注意要根据以下语法结构:

 Careful: toString does not print to the console! It “converts” an object to a String representation
 

在一个类中重写toString()方法:

如图,定义了一个Box的class (constructor下面的getter和setter已省略)

快捷方式:(Eclipse)

                   在该类(Box)里面按Alt+Shift+S,或点击source =>点击Generate toString()

如上图,我们可以根据需要勾选需要表达的相关值,然后点generate,eclipse会自动生成以下 toString()方法

当我们在主类里调用这个toString()时,(box1是在main class里对Box类进行了实例化)

输出如下:

 

(相关值是在主类里被赋值的,此处省略)

可以看到屏幕输出是与 override时的return内容一致。这就是重写和不重写(直接输出对象)的区别。

使用该方法就可以不需要使用.(dot)来访问和输出对象或类的相关数值。

 

上面的例子只是用toString()输出对象属性的值,我们还可以输出对象的方法的值:

定义一个类Sphere用于球体相关数值计算:

如图我们可以通过改变return后的内容来变更我们最终输出效果。

此外,我们为了输出球体面积和体积,在generate toString()方法时,额外勾选了 volume和surface这两个方法:

这意味着,toString()方法会同时return volume&surface这两个方法的return值。

在主类中调用:

输出如下:

static keyword

 

被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问。

static修饰的变量和方法,在程序编译的时候就存在了,而普通的变量和方法,只有在编译完程序执行的时候才被初始化。一句话,static与程序同生同死。因此static的方法不能调用非static变量和成员

The static modifier is also used to define constants
 

static变量:

 

 static 方法:

 

 

 

final keyword

final关键字可以用于三个地方。用于修饰类、类属性和类方法。

     被final关键字修饰的类不能被继承,被final关键字修饰的类属性和类方法不能被覆盖(重写);

     对于被final关键字修饰的类属性而言,子类就不能给他重新赋值了,如果重新赋值,会报错.

若要修改相关method,就只能在其所在类里面进行修改,不能通过override来修改。

当final被用于修饰class时,该class不能被继承

例如在Java中 String 这个类 就是被final 修饰的,所以我们就不能通过子类继承它

 

Enumeration
 

用枚举固定元素和值的关系,使元素成为常量;

枚举也是一个类,是单独的enum 类型,

enum里面的元素就是enum的对象,这些元素是enum实例化之后的东西 所以说我们不能再在外面实例化enum了。

需要这样添加:

注意:enum类型不能实例化成对象

比如定义一个color类型,

然后试着在主类里实例化它(用new关键词)就报错

但我们还是可以声明一个color类型的变量(此时这个变量只能从枚举里的元素选择一个赋值),并打印它:


output:(println命令打印时,enum调用了自带的toString()方法)

比较:

 

vlaueOf()

 

vlaueOf("Red")方法返回的是color.Red 所以这个写法与上面直接用color1的写法一样

 

values()
返回enum的array

输出enum里的所有元素

给enum里的元素增加更多details:

这里的constructor和seter,getter 相当于所有元素都有各自的一组constructor和seter,getter

for each循环:

方便用来遍历数组、集合

语法

 output

 

另一例子(与构造方法使用)

作业中的enum运用实例:

Rating enum如下:

Film class代码如下:

假设我们用一个Demo class调用Film class

因为Film class属性含有Rating enum,所以调用Film class即是调用了Rating enum

 

UML class diagrams
 

Example:

 

 

Has-a relationship

 

aggregation
 

 

 

The Person object belongs to the Car object
The Car object has-a Person object

 

composition

 

 

for enum:

 

Association:
(包括enum)用这个箭头

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值