对象: 方法,域(数据成员)
方法可以调用该对象的数据成员
class Human
{
int getHeight()//成员方法
{
return this.height;
}
int height;//数据成员
}
在方法内部,可以调用同一对象的其他方法。在调用的时候,使用this.method()的形式。
基本类型的数据成员的默认初始值:
数值型: 0
布尔值: false
其他类型: null
return
this, this.field, this.method()
默认初始值,显式初始化
构造器是一个方法。
构造器有如下基本特征:
构造器的名字和类的名字相同
构造器没有返回值
对象最终的初始化值与构建方法中的值一致。因此:
构建方法 > 显式初始值 > 默认初始值(注意:与初始化时的执行顺序有关)
构建方法可以进行重载,普通方法也可以重载
constructor特征: 与类同名,无返回值
constructor目的: 初始化,初始操作
方法重载: 方法名 + 参数列表 -> 实际调用哪一个方法
对象(object)指代某一事物,类(class)指代象的类型。对象可以有状态和动作,即数据成员和方法。
到现在为止,数据成员和方法都是同时开放给内部和外部的。在对象内部,我们利用this来调用对象
的数据成员和方法。在对象外部,比如当我们在另一个类中调用对象的时,可以使用 对象.数据成员
和 对象.方法() 来调用对象的数据成员和方法。
封装(encapsulation)对象的成员(成员包括数据成员和方法),从而只允许从外部调用部分的成员。利
用封装,我们可以提高对象的易用性和安全性。
保留有限的外部接口(interface),隐藏具体实施细节。
所有出现在interface中的方法都默认为public。
用implements关键字来实施interface。一旦在类中实施了某个interface,必须在该类中定义
interface的所有方法(addWater()和drinkWater())。类中的方法需要与interface中的方法原型相符
。否则,Java将报错。
interface, method stereotype, public
implements interface
implements interface1, interface2
在一个新类的定义中使用其他对象。这就是组合(composition)。组合是在Java中实现程序复用
(reusibility)的基本手段之一。has-a
基本类型一旦声明就会被分配内存空间,而普通类型需要使用new关键字来分配内存空间。
package, import
默认权限: 包中可见
-classpath, CLASSPATH
另外也可以设置系统的CLASSPATH环境变量,将上述路径加入到该变量中,而不用每次都键入-
classpath选项。
通过继承,我们创建了一个新类,叫做衍生类(derived class)。被继承的类(Human)称为基类(base
class)。
在衍生类中,不能访问基类的private成员。
当我们创建一个衍生类的对象时,Java实际上先创建了一个基类对象(subobject),并在基类对象的外部(注意,这里是基类对象的外部,衍生类对象的内部),增加衍生类定义的其他成员,构成一个衍生类对象。外部使用者能看到的,就是基类和衍生类的public成员。如下图:
基类对象与衍生类对象
图中黄色为基类对象。基层的成员之间可以互相访问 (利用Human类定义中的this指代基类对象)。
蓝色部分为衍生对象新增的内容,我将这部分称为衍生层。蓝色和黄色部分共同构成衍生对象。衍生层的成员可以相互访问(Woman定义中的this)。更进一步,我们还可以访问基层中public的成员。为此,我们用super关键字来指代基类对象,使用super.member的方式来表示基层的(public)成员。
当我们位于衍生层时(也就是在定义Woman类时),不能访问红色的基层private成员。当我们位于外部时,既不能访问紫色的衍生层private成员,也不能访问红色的基层private成员。
(衍生层的private成员有访问禁忌,所以标为斜线。基层的private成员访问禁忌最多,所以标为交叉斜线)
super和this类似,也是隐式参数。我们在类定义的不同层次时,this会有不同的含义。要小心的使用this和super关键字。
(Java并不强制使用this和super。Java在许多情况下可以自动识别成员的归属。但我觉得这是个好习惯。)
protected
我们之前介绍了两个访问权限相关的关键字,private和public,它们控制了成员的外部可见性。现在,我们介绍一个新的访问权限关键字:protected。
标为protected的成员在该类及其衍生类中可见。这个概念很容易理解,就是说,基类的protected成员可以被衍生层访问,但不能被外部访问,如下图: