类和对象
面向对象的程序设计过程由两个重要概念:类和对象。
对一个类定义而言,可以包含三种最常见的成员:构造器、Field和方法。Field用于定义该类或该类的实例所包含的状态数据,方法则用于定义该类或该类的实例的行为特征或者功能实现。构造器用于构造该类的实例,java语言通过new关键字来调用构造器,从而返回该类的实例。
定义Field的语法格式如下:
[修饰符] Field类型 Field名 [=默认值];
定义方法的语法格式如下:
[修饰符] 方法返回值类型 方法名(形参列表)
{
//由零条到多条可执行语句组成的方法体
}
定义构造器的语法格式如下:
[修饰符] 构造器名(形参列表)
{
//由零条到多条可执行语句组成的方法体
}
类里各成员之间的定义顺序没有任何影响,各成员之间可以相互调用,但是需要指出的是,static修饰的成员不能访问没有static修饰的成员。(也即静态成员不能直接访问非静态成员)
对象this引用
this关键字总是指向调用该方法的对象。根据this出现位置的不同,this作为对象的默认引用由两种情形:
1:构造器中引用该构造器正在初始化的对象;
2:在方法中引用调用该方法的对象。
this关键字最大的作用就是让类中的一个方法,访问该类里的另一个方法或者Field。
- 方法
方法不能独立存在,方法必须属于类或者对象。
使用static修饰的方法属于这个类本身,这个方法即可以使用类作为调用者类调用也可以使用对象作为调用者来调用。
没有使用static修饰的方法属于该类 的对象,不属于这个类本身。只能使用对象作为调用者使用,而不能使用类作为调用者调用。
方法的参数传递机制只有一种:值传递。所谓的值传递,就是将实际参数值的副本(复制品)传入方法内,而参数本身不会受到任何影响。
方法重载:
已经知道确定一个方法需要三个要素:
调用者,也就是方法的所属者,类对象都可以;
方法名,方法的标识;
形参列表,当调用方法时,系统将会根据传入的实参列表匹配。
重载的要求就是:同一个类中方法名相同,参数列表不同。其他部分没有关系。
成员变量和局部变量
成员变量包括实例Field(不以static修饰)和类Field(以static修饰)。
局部变量包括形参(方法签名定义的变量)、方法局部变量(在方法类定义)和代码块局部变量(代码块内定义)。成员变量无需显示初始化,系统会在这个类的准备阶段或者创建该类的实例时进行默认初始化,赋值规则与数组相同。
而局部变量除了形参以外,都必须显示初始化。
java允许局部变量与成员变量同名,如果方法里的局部变量和成员变量同名,局部变量会覆盖成员变量,如果需要在这个方法里引用被覆盖的成员变量,则可使用this(对于实例Field)或者类名(对于类Field)作为调用者来限定访问成员变量。
- 封装和隐藏
封装时面对对象的三大特征之一,它指的是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问内部信息,而是通过该类所提供的方法来实现对内部信息的操作和访问。
为实现良好的封装,需要从两个方面来考虑:
1、将对象的Field和实现细节隐藏起来,不允许外部直接访问;
2、把方法暴露出来,让方法来控制这些Field进行安全的访问和操作。
访问控制符:
private:同一个类可以使用;
default :同一个类和同一个包中可以使用;
protected:同一个类、同一个包和子类中可以使用;
public:都可以使用。
- 深入构造器
构造器是特殊 方法,用于创建实例时执行初始化,是创建对象的重要途径。
为了让系统能区分不同的构造器,多个构造器的参数列表必须不同。系统通过new调用构造器时,将根据传入的实参列表决定调用哪一个构造器。
6. 类的继承
继承也是面向对象的三大特征之一,也是实现软件复用的重要手段。单继承。
java里子类继承父类的语法格式如下:
修饰符 class Subclass extends Superclass
{
//类定义部分
}
- 多态
- 继承与组合
- 初始化块