一.面向对象基础理论
1.面向对象的理解
比如一个人
对象就是现实中实实在在存在的每个个体,每个人都是一个对象,这些对象都有自己的属性,如名字,年龄,性别等。
用面向对象的思想表示,代码如下:
class就是对象的具体描述,人可以跑,跳跃等,则是class中的函数。
类是一个抽象的概念,是对具体对象的描述,而现实中的人则是类的一个个实体对象。
比如一个叫王小二的人:
在面向对象中,我们不用关心类的具体实现,只需要知道其接口,就像开车一样,我们不会关心汽车的构造,发动机的具体实现,只需要知道方向盘,油门,刹车等等的使用
2.类之间的关系
依赖关系:use-a A类中的一个方法操作了另一个类中的对象。
聚合关系:has-a A类中的对象包含B类的对象。
继承关系:is-a A继承了B类,此时A类不仅有了B类的方法,还加入了自己的方法。
3.面向对象的特性
(1)封装:
封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,
即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。
(2)继承:
继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。
对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),
而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。
java只支持单继承。
(3)多态性:
多态性是指允许不同类的对象对同一消息作出响应。
函数可以同名(参数不同,参数个数或者参数类型不同)
boolean isEquals2(int i);
boolean isEquals2(double i);
在调用的时候,不用区分这两个函数,系统会根据函数的参数类型,自动区分调用。
4.对象的接口
如上面Human的对象王小二,他提供的接口就是Human类中的public函数,
只需要提供一个接口,供外部来调用。作为外部的调用者唯一关心的: 接口是什么。
在类中实现的时候,用public,private,protected来控制外部的访问权限。
5.关于继承
比如有一个Dog类,表示狗这个物种,有一个Bird类,表示鸟,他们都是动物,有共同的属性,则可以让他们继承Animal类
然后Dog类可以继承自Animal
JDK中有说明:
--类 Object
-java.lang.Object
public class Object
类 Object 是类层次结构的根类。每个类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法。
从以下版本开始:
JDK1.0
1.面向对象的理解
比如一个人
对象就是现实中实实在在存在的每个个体,每个人都是一个对象,这些对象都有自己的属性,如名字,年龄,性别等。
用面向对象的思想表示,代码如下:
class Human
{
int mName;
int mAge;
//...
void run();
void jump();
//...
}
class就是对象的具体描述,人可以跑,跳跃等,则是class中的函数。
类是一个抽象的概念,是对具体对象的描述,而现实中的人则是类的一个个实体对象。
比如一个叫王小二的人:
Human 王小二 = new Human();
这样就创建了一个Huamn的对象王小二,王小二是一个Human,则他拥有Human的一切属性和方法。
在面向对象中,我们不用关心类的具体实现,只需要知道其接口,就像开车一样,我们不会关心汽车的构造,发动机的具体实现,只需要知道方向盘,油门,刹车等等的使用
王小二.run();
2.类之间的关系
依赖关系:use-a A类中的一个方法操作了另一个类中的对象。
聚合关系:has-a A类中的对象包含B类的对象。
继承关系:is-a A继承了B类,此时A类不仅有了B类的方法,还加入了自己的方法。
3.面向对象的特性
(1)封装:
封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,
即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。
(2)继承:
继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。
对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),
而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。
java只支持单继承。
(3)多态性:
多态性是指允许不同类的对象对同一消息作出响应。
函数可以同名(参数不同,参数个数或者参数类型不同)
boolean isEquals2(int i);
boolean isEquals2(double i);
在调用的时候,不用区分这两个函数,系统会根据函数的参数类型,自动区分调用。
4.对象的接口
如上面Human的对象王小二,他提供的接口就是Human类中的public函数,
class Human
{
String mNmae;
int mAge;
public void setAge(int age)
{
mAge=age;
}
}
这样在外部就可以调用这个函数,王小二.setAge();我们只需要知道通过setAge()就可以设定年龄,而不需要关系具体的实现,这就是封装的特性。
只需要提供一个接口,供外部来调用。作为外部的调用者唯一关心的: 接口是什么。
在类中实现的时候,用public,private,protected来控制外部的访问权限。
5.关于继承
比如有一个Dog类,表示狗这个物种,有一个Bird类,表示鸟,他们都是动物,有共同的属性,则可以让他们继承Animal类
class Animal
{
String mName;
int mSex;
void run();
void jump();
}
然后Dog类可以继承自Animal
class Dog extends Animal
{
}
这样Dog就自动拥有了Animal的属性。
JDK中有说明:
--类 Object
-java.lang.Object
public class Object
类 Object 是类层次结构的根类。每个类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法。
从以下版本开始:
JDK1.0