JAVA 000(类和对象)
面向对象程序设计(OOP)核心是引入了对象的概念,一种典型的设计思想是——“抽象”:将现实世界中的实体理解为由属性实施行为的统一体,即对象。属性表示对象的性质,行为则定义了对象可以提供的外部服务。面向对象程序设计中其他三个典型特征是:继承,封装,多态。
1. 封装
封装是一种将操作和操作所涉及的数据捆绑在一起,使其免受外界干扰和误用的机制。在Java中,最基本的封装单元是类,一个类定义为具有相似特征(属性和行为)对象的一种抽象。
2. 继承
继承是指一个新的类继承原有类的基本特征,并可增加新的特征。原有的类称为父类或基类,新的类称为子类或派生类。子类包含父类的所有数据和方法,还可以增加新的属性和方法。继承具有传递性。
3. 多态
多态性是指类中同一名称的行为(方法)可以有多种不同的功能,或者相同的接口有多种实现方法,其实现包括静态的(重载)和动态的(虚函数)。
一、类
类是Java中最重要的复合数据类型,是组成Java程序的基本数据元素,它封装了一类对象的属性和改变这些属性的方法,是这一类对象的原型,即类为形象化描述,对象是实例。使用时,用户必须先定义类,并生成该类的实例,然后才能通过该实例访问其成员变量和方法。
基本形式:
[类修饰符] class 类名 [extends 父类名] [implements 接口名]
{
…//类体,包括定义类的成员变量和方法
}
父类名只能一个,接口名可多个。接口实际上是一种特殊的类,它所定义的方法一般为空,需要在派生类中实现该方法。
1. 定义成员变量
格式:
[修饰符]类型 成员变量名列表;
成员变量的修饰符如public、protected、private、final和static等。
2. 定义成员方法
格式:
[修饰符] 返回值类型 方法名 ([参数列表])
{
方法体
}
返回值可以是任意基本类型或类,如果方法不返回任何值,则声明为void(空)。
Java中有两种特殊的成员方法:构造方法和main()方法。
构造方法要求方法名必须与类名相同,而且不能有返回值(void)也不行;main()方法通常是一个Java应用程序的执行起点,其定义格式为:
public static void main(String args [])
其中,main为方法名,args为形参,类型为字符串数组,void表示main方法无返回值。
3. 方法重载
Java允许使用同一个名字去定义多个方法,只要方法的参数列表不同,即参数的数量、类型不完全相同。返回值类型不同不能用来区分重载。
二、对象
1. 实例化对象
格式:
类名 对象名 = new 类名 ([参数列表])
关键字new为每一个对象分配一片内存区域,并返回该对象的一个引用(可以理解为该对象的内存首地址)。
**当运算符==和 != 用于两个对象的比较时,它判断的是两边是否为同一对象(地址空间相同)equals()方法可以判断值。
2.初始化
新建一个对象时,系统自动完成一下3项工作:一为对象分配不同的内存空间;二如果类定义时有初值,使用该类对成员变量进行初始化;如果没有初值,可以使用默认值;三自动调用构造方法,如果构造方法有多个,则根据参数的类型、个数等决定调用哪种构造方法。
3.使用对象
Java中对象的使用包括对成员变量的引用和成员方法的调用,它们都是通过点运算(.)来实现的,
格式:
对象名.成员变量
对象名.成员方法名(实参列表)
方法调用包括:传值调用和引用。传值调用的特征是形参一般为基本类型的变量,实参单向的传值给形参,即形参的值不会改变实参的值;当实参为复合数据类型时,Java自动采用引用的方式传参,这时实际传递的是实参数组的引用,对形参改变的同时也会改变实参。
4.使用静态变量和方法
如果所有对象希望共享同一变量,则可以在变量定义前加上一个关键字static,这样就定义了一个类变量,也称静态变量。静态变量不在属于某个实例或对象,而是属于整个类。
eg.
static int no; //定义静态变量no
由于静态变量和静态方法都属于整个类,因此可以直接通过类名访问,而无须创建该类的实例,
格式:
类名.静态变量名;
类名.静态变量名([实参列表])
三、包
在一个包中,类不可以重名,但是不同的包中允许相同的类名出现,使用“包名+类名”的方式可以达到有效管理的目的。
1.包的定义
只需要在源文件的起始处添加一条关键字package的语句即可,则任何在该文件中定义的类都属于指定的包。package语句指定了一个类存放的命名空间,如果没有package关键字,则类会被放入一个默认的包中,该包没有名字。
格式:
package [包名1.[包名2.[包名3]]]
用 . 指明包的层次。
2.包的引入
通过关键字import引入包中的任何类型,并使得这些类在整个程序中可见。
import基本格式:
import [包名1.[包名2.[包名3.]]](类名|*)
使用
格式:
import java.util.* //引入java.util包中的所有类
import java.applet //引入java.applet包中的类Applet
四、类及成员修饰符
修饰符包括public、protected、private、final、abstract和static等。
1.
Java类的成员变量和方法访问权限如下表:
修饰符 | 同一个类 | 同一个包 | 不同包中的子类 | 不同包中的非子类 |
---|---|---|---|---|
private | * | |||
default | * | * | ||
protected | * | * | * | |
public | * | * | * | * |
2.final
被final修饰的元素不允许再修改。例如,用final修饰的类(最终类)不能再有子类;用final修饰声明的方法(最终方法)不能再被重写;用final声明的成员变量(常量)初始化后,不能再被重新赋值或修改。
3.abstract
关键字abstract修饰的类称为抽象类,抽象类是一种没有完全实现的类。不能用它实例化任何对象,它的主要用途是用来描述一些概念性的内容,然后在子类中具体去实现这些概念,这样可以提高开发效率,统一用户接口,所以抽象类更多的是作为其他类的父类。
抽象类中可以含有抽象方法,抽象方法是用abstract修饰的方法,抽象方法只有方法的返回值、名称和参数列表,没有方法体,它必须在子类中具体实现该方法。
如果一个类包含抽象方法,则必须被定义为抽象类,但抽象类不一定要包含抽象方法。