抽象与封装
1.抽象
2.封装
声明Java类
1.类与对象
(1)对象
对象用一个或多个域存储它的状态,通过方法表达它的相关联的行为
域
对象的状态存储在“域”中,有时又被称作变量
方法
对象的行为通过“方法”表现出来,方法又被称为函数
(2)类
2.对象与类UML图
(1)属性
属性用来描述类的特征,表示需要处理的数据
属性定义:
可见性 属性名:类型 = 缺省值{约束特性};
可见性
可见性表示该属性对类外的元素是否可见,有:
- public ( + ) 公有的,即模型中的任何类都可以访问该属性
- private ( - )私有的,表示不能被别的类访问
- protected ( # ) 受保护的,表示该属性只能被该类及其子类访问
- 如果可见性未声明,表示可见性不确定
(2)操作(或方法)
对数据的具体处理方法的描述放在操作部分,操作说明了该类能做些什么工作
操作定义:
可见性 操作名(参数表): 返回类型{约束类型};
例子:
类的实例
通过类创建的对象称为类的“实例”
在用java写的程序中,一个类的实例使用new操作符实现的,即:实例 = new 类名称;
类之间的关系
类的关系有泛化、实现、依赖和关联。其中关联又分为一般关联关系和聚合关系,合成关系
(1)泛化
是一种继承关系,表示一般与特殊的关系,它指定了子类如何特化父类的所有的特征和行为
(2)实现
是一种类与接口的关系,表示类是接口所有特征和行为的实现
(3)关联
是一种的拥有的关系,它使一个类知道另一个类的属性和方法
(4)聚合关系
是整体与部分的关系,且部分可以离开整体而单独存在
(5)组合关系
是整体与部分的关系,但部分不可以离开整体而单独存在,它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期
(6)依赖
是一种使用的关系,即一个类的实现需要另一个类的协助,所以尽量不使用双向的相互依赖
3.声明java类
(1)声明类的格式
[修饰符] class 类名称 [extends 父类]//类头部
{
//类体部
域;
方法声明;
}
修饰符
修饰符决定着类在程序运行中被处理的方式,控制着变量或对象的可访问性
可以使用默认的修饰符,也可以显式指定,主要有三种的修饰符:
-
public (共有的)
可以被其他任何类使用,如果没有这个修饰符,类只能被与他在同一个包中的其他类使用 -
final (最终的)
被他修饰的类不能产生子类 -
abstract (抽象的)
不能被实例化
(2)java类的组成
一般来说,java类包含下列几个部分: -
修饰符
public,private这种 -
类名称
-
父类名称
-
接口列表
-
类体部
4.类成员访问控制
访问级别修饰决定其他类是否可以使用特定的域或调用特定的方法。java提供两个级别的访问控制: -
顶级:public,package-private(非显示修饰)
-
成员级:public,private,protected,package-private(非显示修饰)
(1)类声明可以用修饰public,在这种情况下,类在任何地方都是可见的。如果没有修饰,类仅在它自己所在的包中可见
(2)成员级控制,使用public修饰或没有修饰
对于成员有两个附加的控制修饰:private和protected -
private修饰的特定成员仅可被拥有它的类访问
-
protected修饰的特定成员仅可被拥有他的包以及在其他包的子类访问
(3)访问级别
4.this
this是一个当前对象的引用——即正在被方法或构造器调用的对象,可以使用this引用当前对象的任何成员
(1)使用this引用域
使用this的多数原因是因为一个域被方法或构造器的参数屏蔽,即参数名与域名相同
例:
public class Point
{
public int x = 0,y = 0;
public Point(int x,int y)
{
this.x = x;
this.y = y;
}
}
(2)用this引用构造器
从一个构造器的内部,可以用this关键字调用在相同类中的另一个构造器
例:
public class Rectangle
{
private int x,y,width,height;
public Rectangle()
{
this(0,0,0,0);//调用了另一个构造函数
}
public Rectangle(int x,int y,int width,int height)
{
......
}
}
声明域和方法
1.域
域或成员变量声明的一般语法格式:
修饰 类型 变量(域)名称
(1)访问修饰
修饰符用于控制其他类或对象使用域,决定其他类是否可以使用特定的域或调用特定的方法
- public(共有的)
被public修饰的成员变量,对于其他所有的类或对象都是可见的,可以被其他的类或对象访问
- package-private(包私有的)
域可以被同一个包中的所有类和对象访问
-protected(保护的)
域可被拥有它的包以及在其他包的子类和子类的对象访问
- private(私有的)
域仅能被拥有该域的类访问
根据数据封装的原则,域常常使用private修饰,但可以通过public的方法来访问private的域
(2)类型
指成员变量的数据类型 - 原始类型,boolean,byte…
- 引用类型,String,object等和其他类和接口
(3)域变量名称
(4)初始化域
域的初始化方式:
1)声明变量的同时赋值
语法格式:
[修饰符] 类型 域(变量)名称 = <初始值>;
例:
private int number = 100;
2)在构造方法初始化实例变量
法一:使用初始化代码块
直接在类里:
(啥前缀也不用写!
{
初始化代码
}
java编译器会复制这个代码块到每个构造方法,因此这个初始化方法可用在多构造方法之间共享初始化代码块
法二:final方法
用final方法初始化域的方法如下:
private 变量类型 变量名称 = final方法名();
或
protected final 变量类型 final 方法名()
{
//初始化代码
}
示例程序:
(5)静态域
用static修饰的域,又称为“类变量”,语法格式:
访问修饰 static 数据类型 变量名称;
例:
public static int number = 100;
不管类被实例化多少次,类变量只有一个
即类的多个实例变量共享一个类变量
类变量可以通过类名直接引用,例:
Math.PI;
可以使用静态域代码块来初始化静态变量:
static{
初始化代码;
}
类中允许有多个这种静态初始代码块,它们可以放在类体部的任何地方
静态域初始化语句先于构造函数被执行
(6)最终域
由修饰符“final”修饰的域,此种域不能被改变,格式:
访问修饰 final 数据类型 变量名称;
例:
class PhoneCard
{
final String TYPE_ID = "JPG_TYPE";
double cardNumber;
......
}
(7)常量
格式:
修饰 static final 类型 常量名 = <字面量>;
例:
static final double PI = 3.141592653589793;