一. 面向对象的介绍
1.面向过程和面向对象
1.
面向过程
–
“
面向过程”是一种以过程为中心的编程思想。
只要
分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,
使用的时候一个一个依次调用这些函数就可以
了。
–
例如
C
语言属于面向过程编程语言。
2.
面向对象
–
“面向对象”
(ObjectOriented
Programming
简称
OO
P
)
是一种以事物为中心的编程思想。
–
面向对象需要把待解决的问题分解成各个对
象
模型
,
并且设计好各个对象所具有的属性和功能。使用的时候需要创建出所需要的对象,然后让这些对象去共同解决问题。
–
例如
Java
、
C++
属于面向对象编程语言。
2.类和对象
1.
类是对某一类事物的描述,是抽象的、概念上的定义;对象是实际存在的该类事物的每个个体,
是具有类类型的变量。
因而也称实例
(instance)
。
2.
类是对象的抽象,而对象是类的具体实例。类是抽象的,不占用内存,而对象是具体的,占用存储空间。
3.
如果将对象比作汽车,那么类就是汽车的设计图纸。所以面向对象程序设计的重点是类的设计,而不是对象的设计。
3. 面向对象的特征
•
面向对象的三个基本特征是:封装、继承、多态
1.
封装可以隐藏对
象的属性和实现细节,仅对外公开接口
,并且可以控制对象的属性和方法的访问级别,提高了程序的模块化及安全性,且易于维护。
2.
继承使得一个类可以直接使用另一个类中
的属性和方法。
并且在无
需重新编写原来的类
的情况下可以对这些功能进行扩展
。
继承体现了对现实世界的抽象模拟,提高了代码的复用性。
3.
多态按字面的意思就是“多种状态”
。多态的作用是
可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。
4.Java中的面向对象
1.
Java
完全基于类、对象
2.
Java
中的类结构
–
Java
的类可组织在包
(
package
)
中
–
基类:所有
Java
的类都派生自
Object
Java
提供一些标准类库,这些类库分布在一系列的包中,如
java.lang
,java.util,java.net
等
(
参考
JDK
安装路径下的
src.zip
二. 类的声明和使用
1.类的声明
1.
类声明语法:
–
[类修饰符]
class
类名
[extends 超类名]
[implements 接口名]{
成员变量定义;
方法定义;
}
2.
类修饰符
(Modifier):
–
public:
允许其他类
(
没有限制
)
访问本类,一个源文件仅可以有一个
public
类
–
缺省
(
没有
public)
:可被当前包中的其他类访问
–
abstract:
没有实例的抽象概念类
–
final:
不能再被扩展,不包含子类的类;易于安全性的实现,或用于创建固定功能的类
3.
父类继承声明:
extends
父类名
4.
实现接口(
interface):implements
接口名
5.
Abstract
不能和
final
同时修饰同一个类
6.
类声明的例子
–
publicabstract class Sample1
{…………}
–
classSample2 extends Sample1
{…………}
–
finalclass Sample3 extends Sample2
{…………}
3.类的成员变量的声明
1.
声明类的成员变量
(
member
)
的语法
–
[修饰符]数据类型 变量名
;
2.
修饰符
–
访问控制符
--
public:
可被所有类引用
--protected:该类自身、子类、同一包中的其他类
--
缺省
(没有访问控制符
)
:该类自身、本包中的类
--
private:
仅可被该类自身引用和修改,
不能被其他任何类
(
包括子类
)
引用
–
static
:类成员变量,对所有的实例一致,引用是前缀可使用类名或对象名
–
final:
数值不变常量,定义同时应对其进行初始化,不一定,也可以利用构造函数给不同的对象赋不同的值。
3.
成员变量声明的例子
–
publicclass Sample {
public int x;
privateString str;
static final double pi = 3.1415926D;
……………………
}
4.类成员方法的声明
1.
声明类的成员方法
(method)
的语法
–
[修饰符]返回类型 方法名
(
参数类型形式参数
1
,
参数类型 形式参数2,…)[throws例外名]{
方法体;
return 返回值;//没有返回值时可以省略
}
2.
方法说明:
–
形式参数:在方法被调用时用于接收外部传入的数据的变量
–
参数类型:就是该形式参数的数据类型
–
实参:调用方法时实际传给方法形式参数的数据
–
返回值:方法在执行完毕后返还给调用它的程序的数据
–
返回值类型:方法要返回的结果的数据类型。没有返回值时为
void
3.
修饰符
–
访问控制符
n
public:
可被所有类引用
n
protected:
该类自身、子类、同一包中的其他类
n
缺省
(没有访问控制符
)
:该类自身、本包中的类
n
private:
仅可被该类自身引用和修改,不能被其他任何类
(
包括子类
)
引用
–
static
:
静态方法,又称
类方法。前缀可使用类名或对象名。在方法体中只能使用类的
static变量和static方法
。
–
final:
子类中不能重新定义该方法
–
abstract:
抽象方法,只有方法的定义而没有方法体。需要在子类中通过重写该方法来实现
–
throws:
通告本方法中会产生的例外
(
异常
)
类型,提醒调用者要对相应的可能例外进行处理
4.
成员方法声明的例子
publicclass Sample {
privateint x;
private static double pi = 3.1415926D;
public void setX(intnewX) {
x = newX; // 可以直接使用成员变量
}
public final intgetX() {
return x;
}
public static void setPi(double newPi) {
pi = newPi; // 静态方法中只能使用静态成员变量
}
}
5.对象的创建
•
创建某个类的具体对象
类名 欲创建的对象名 = new 类名(参数表);
例子:
Person类的定义:
publicclass Person {
publicint age;
publicvoid shout() {
System.out.println("Myage is "+age);
}
}
Person类的使用:
Person p1 = new Person();
•
Personp1 = new Person();
语句执行完后的内存状态
•
当一个对象被创建时,会对其中各种类型的成员变量自动进行初始化赋值。
6.对象的使用
•
对象创建之后就可以使用“对象名
.
对象成员”的格式来访问对象的成员
(
包括属性和方法
)
public class SamplePerson {
public static void main(String[] args) {
Person p1 = new Person();
Person p2 = new Person();
p1.age = -30; // 设置成员变量的值
p1.shout(); // 调用成员方法
p2.shout();
}
}
•
上面程序运行的
内存布局如下图:
6.匿名对象
1.
我们可以不定义对象的名字,而是直接调用这个对象的方法。这样的对象叫做匿名对象。
2.
如果对一个对象只需要进行一次方法调用,那么就可以使用匿名对象。
•
•
普通调用:
Personp1 = new Person();
p1.shout();
•
匿名调用:
(
newPerson()
)
.shout();