面向对象编程
面向对象编程
?我们学编程学的是什么?
思想
面向对象编程
?我们如何理解面向对象?
面向对象编程
? 1.基本概念:
1.1 类与对象的初探
( 1)类描述了一组有相同特性(属性)
和相同行为(方法)的对象。
注,面向过程的语言与面相对象的语言的区
别就在于,面向过程的语言不允许程序员自
己定义数据类型,而只能使用程序中内置的
数据类型。
面向对象编程
? 1.2 内置数据类型与函数
? ( 1)每门语言都有自己独特的数据类型。
? ( 2)函数 —实现某种特定功能的黑匣子
面向对象编程
? int addnum(int x,int y){
return x+y;
}
? int myAge = 0;
int a=25;
void remAge(int a){
myAge=a;
}
面向对象编程
? 1.3 指针以及引用
? 指针及引用是在 C++中有的,JAVA中没有。
JAVA中取消了对内存的操作,随之而来的是也
取消了操作符重载的操作。引用主要还是用在函
数参数的传递上。
面向对象编程
? 1.4 运算符及控制语句
? 自己查看相关书籍
面向对象编程
? 2.深入探讨面向对象
? 2.1“类型”的内部细节
? 面向对象的编程语言最大的特色就是可以编写自己所
需的数据类型;
? 对象具有类所描述的所有的属性以及方法。
? 类是属性与方法的集合。而这些属性与方法可以被声
明为私有的( private),公共的 (public)或是受保护
(protected)的,它们描述了对类成员的访问控制。为
了实现数据的封装,提高数据的安全性,我们一般会
把类的属性声明为私有的,而把类的方法声明为公共
的。我们提倡的是:,对象调方法,方法改属性, 。
面向对象编程
? 2.2通过实例看内存分配
? 现在我们要编写某家公司员工管理系统,你认为
最合适的数据类型是什么?
? 某家公司的员工是人类的一个特殊群体,它除了具备
人类的所有特性与方法外,它还有额外的特性与方法,
比如她有她的工资、信用卡密码、作息时间等等,这
些特性以及工作内容,工作量等等这些方法。
面向对象编程
? //employee.java
? public class employee{
? private String name; //员工姓名
? private int age; //员工年龄
? private char sex; //员工性别
? private float emolument; //员工薪水
? private boolean lunch; //员工午餐
? //…… 等等
? public void heater(){ //这个方法是用来加工员工的午餐
? lunch = true;
? }
面向对象编程
? public void setName(String a){ //这个方法是修改员工的
姓名
? name= a;
? }
? public String getName(){ //这个方法是得到员工的姓
名
? return name;
? }
? //…… 等等
? }
面向对象编程
? 想要做的是,有一个员工叫,Jack”,我修改
它的名字后对它进行输出
输出结果是:
my name is John
这串字符串是在输出窗口的 x坐标轴为 10 px,
y坐标轴为 10 px的位置。
面向对象编程
? //workstation.java
? import java.awt.Graphics;
? import java.applet.Applet;
? public class workstation extends Applet{
? private employee Jack ; //对象的声明,此时并不分配内存!
? public void init(){
? Jack = new employee(); /*此时创建对象会调用构造函
数 */
? Jack.setName(“John”); //设置我的名字
? }
? public void paint(Graphics g){
? g.drawString("my name is "+Jack.getName(),10,10);//
显示我的年龄
? }
? }
面向对象编程
? private String name; // 员工姓名
? private int age; //员工年龄
? private char sex; //员工性别
? private float emolument; //员工薪水
? private boolean lunch; //员工午餐
? public void heater(){ //这个方法是用来加工员工的午餐
? lunch = true;
? }
? public void setName(String a){ //这个方法是修改员工的姓名
? name= a;
? }
? public String getName(){ //这个方法是得到员工的姓名
? return name;
? }
面向对象编程
? 语句,private boolean lunch;”
? 公司不管午餐,每个员工都需要带饭。我们现在这样想,公
司的空间是所有的内存容量,你的办公桌就是计算机中的内
存中的一部分( 每个员工都有一份,是在创建对象时分配
的 )。你把午饭带到了公司,放在了你的办公桌上。“午饭”
占据了你的办公桌的一角( 占了你自己“对象”的一块内存
容量 )。这份午饭只属于你自己,同样别人的也只属于她自
己。所以每个员工( 对象 )都需要一快空间( 内存 )来存放
自己的午餐( 属性 )。在计算机中也是这样的,每创建一个
对象,就会在内存中从新分配一块内存来放“午餐 ——
lunch”这个属性( 对象所拥有的所有的属性 )。
面向对象编程
? 计算机只会为对象的属性分配内存。因为每个对象
的都不一样,
? 就像你往公司带的午饭和我往公司带的午饭不一样是一
个道理。但方法就不同了。早晨带的饭中午就凉了,你
需要用微波炉来加热。微波炉不用你带,公司就有(只
占公司的一块空间),它放在了午餐桌上。它属于所有
员工的,因为每个员工都可以用它。而不必每个员工都带
一份。由此可见,每个员工(对象)都有一份午饭(属
性),但所有的员工(对象)只一个微波炉(方法)。
所有的员工(对象)都可以通过这个微波炉(方法)来
改变自己午餐(属性)的冷热状态。在计算机中也就是
这样,方法只有一份,供所有的对象使用。而属性是每
个对象一份,因为每个对象的都不一样。
面向对象编程
? 2.3深入探讨函数
? 2.3.1构造函数、默认构造函数
面向对象编程
? 构造函数,
从特征上来说:
1.它是编程语言中唯一没有返回值类型的函数。
2.它的名称与类的名称必须要完全相同。
3.它必须被声明为公共( public)的类型
4,可以对构造函数进行重载。
5.它在创建对象是自动被调用。
从功能上来说:它是对类中的属性进行初始化。
面向对象编程
? 如果没有自己定义构造函数,系统会自动为
我们定义一个,默认构造函数,。他会把数
值变量自动赋值为 0,把布尔变量赋值为 false
等等(但在 C++中,默认构造函数不初始化
其成员)。如果程序员定义了构造函数,那
么系统就不会再为你的程序添加一个缺省的
默认构造函数了。
? 注,提倡的是自己定义构造函数,而不是用
系统的默认构造函数
面向对象编程
? public employee()
? { //这个就是构造函数
name =,jw”; //设置员工姓名
age = 20; //设置员工年龄
sex =,M”; //设置员工性别
emolument = 100; //设置员工薪水
lunch = false; //设置员工午餐
}
面向对象编程
? public employee(String n,int a,char s,float e,boolean l)
? { //带参数的构造函数
name = n; //设置员工姓名
age = a; //设置员工年龄
sex = s; //设置员工性别
emolument = e; //设置员工薪水
lunch =l; //设置员工午餐
}
? Jack = new employee("Jack",20,'M',100,false);
面向对象编程
? 2.3.2重载构造函数
? 在 JAVA中:
1,函数重载是一个类中声明了多个同名的方法,但
有不同的参数个数和参数类型。
2,函数重构是指在子类中声明与父类同名的方法,
从而覆盖了父类的方法。重构解决了子类与父类的差异
问题。(在讨论到继承时我会详细说明)
面向对象编程
? 在 C++中:
1.函数重载的概念一样。
2,重构的概念可就不一样了,C++中
功能更为庞大的虚函数。
面向对象编程
? 操作符重载
例:我们定义三个整数变量:
int i1=2,i2=3,i3=0;
i3 = i1 + i2;
此时 i3=5;加号实现了两个数相加的运算功能。
然而我们现在要定义三个字符串变量:
String str1=”Ja”,str2=”ck”,str3=””;
str3 = str1 + str2;
面向对象编程
? 函数重载
? 函数名相同,参数不同
? 由于参数类型、参数数量、返回值类型不同我们
就可以对相同名称的函数进行区分
面向对象编程
? 例:重载构造函数
? public class employee{
public employee(String n,int a,char s,float e,boolean l)
{ //构造函数
name = n; //设置员工姓名
age = a; //设置员工年龄
sex = s; //设置员工性别
emolument = e; //设置员工薪水
lunch =l; //设置员工午餐
}
面向对象编程
public employee(){ //请注意这个函数没有参数
name =,Jack”;
age = 20;
sex = ’W’;
emolument = 99;
lunch = true;
}
//…… 等等
};
面向对象编程
? 重载普通的函数与重载构造函数类似,不过
它多了一个 this指针,this一般是对当前对象的
引用。
? 如果涉及到两个以上的对象时就会使用 this指
针。每个成员函数都有一个 this指针,它是一
个隐藏的参数,this指针指向调用它的对象。
方法只有一份,而对象都有自己的属性,当
对象调用方法来更改属性的时候,靠 this指
针指向自己的属性
面向对象编程
? 2.3.3 初始化与赋值
初始化与赋值是完全不同的两个概
念。创建一个类的时候会调用这个类的构造
函数对对象的属性进行初始化。如果以后再
把这个对象赋给其他同类型的对象时,在
JAVA中直接赋值就行了,而在 C++中就需要拷
贝构造函数以及操作符重载了。
面向对象编程
? 2.3.4析构函数:
JAVA中不再支持指针了,所以你感
觉不到它的重要性,因为系统会自动为你释
放内存。而在 C++中一切都是手动的。在构
造函数中 new了一个指针,在析够函数中就
要 delete这个指针。
面向对象编程
? 2.3.5静态:
把一个变量或函数声明为静态的需要
,static”这个关键字。声明静态的目的是“为
某个类的所有对象的某个属性或方法分配单
一的存储空间”。静态的数据是属于类的,
不属于任何的对象。静态的数据在声明的时
候系统就为他分配了内存空间,而不用等到
创建对象时。
面向对象编程
? 静态函数也是属于类的,在定义的时候就分
配的内存。调用是可以使用类名直接调用。
其他的和普通成员函数没什么不同的。
? 注,在 JAVA中,静态的成员函数只能修改静
态的属性,而静态的属性可以被所有的成员
函数修改。
面向对象编程
? 2.4继承
它的最大好处就是“代码重用”,大大提高了工作效
率。
? 例:世界上先有的黑白电视机,它有自己的工作原理。然而
人们在他的基础之上 开发 出了彩色电视机。彩色电视机继承
了黑白电视机的所有的特性与方法!因为它既能显示彩色图
像也能显示黑白图像。然而它与黑白电视机又有许多区别,
在工作原理上。彩色电视及多了矩阵色电路,把彩色信号分
离出三种颜色( RGB),他就能显示彩色的图像了。而黑白
电视机没有这块电路,即使它收到了彩色信号也显示不了彩
色图像。彩色电视机是从黑白电视机中派生出来的。所以,
黑白电视机是父类,彩色电视既是子类,彩色电视继承了黑
白电视机所有的特性与方法。
面向对象编程
?我们学编程学的是什么?
思想
面向对象编程
?我们如何理解面向对象?
面向对象编程
? 1.基本概念:
1.1 类与对象的初探
( 1)类描述了一组有相同特性(属性)
和相同行为(方法)的对象。
注,面向过程的语言与面相对象的语言的区
别就在于,面向过程的语言不允许程序员自
己定义数据类型,而只能使用程序中内置的
数据类型。
面向对象编程
? 1.2 内置数据类型与函数
? ( 1)每门语言都有自己独特的数据类型。
? ( 2)函数 —实现某种特定功能的黑匣子
面向对象编程
? int addnum(int x,int y){
return x+y;
}
? int myAge = 0;
int a=25;
void remAge(int a){
myAge=a;
}
面向对象编程
? 1.3 指针以及引用
? 指针及引用是在 C++中有的,JAVA中没有。
JAVA中取消了对内存的操作,随之而来的是也
取消了操作符重载的操作。引用主要还是用在函
数参数的传递上。
面向对象编程
? 1.4 运算符及控制语句
? 自己查看相关书籍
面向对象编程
? 2.深入探讨面向对象
? 2.1“类型”的内部细节
? 面向对象的编程语言最大的特色就是可以编写自己所
需的数据类型;
? 对象具有类所描述的所有的属性以及方法。
? 类是属性与方法的集合。而这些属性与方法可以被声
明为私有的( private),公共的 (public)或是受保护
(protected)的,它们描述了对类成员的访问控制。为
了实现数据的封装,提高数据的安全性,我们一般会
把类的属性声明为私有的,而把类的方法声明为公共
的。我们提倡的是:,对象调方法,方法改属性, 。
面向对象编程
? 2.2通过实例看内存分配
? 现在我们要编写某家公司员工管理系统,你认为
最合适的数据类型是什么?
? 某家公司的员工是人类的一个特殊群体,它除了具备
人类的所有特性与方法外,它还有额外的特性与方法,
比如她有她的工资、信用卡密码、作息时间等等,这
些特性以及工作内容,工作量等等这些方法。
面向对象编程
? //employee.java
? public class employee{
? private String name; //员工姓名
? private int age; //员工年龄
? private char sex; //员工性别
? private float emolument; //员工薪水
? private boolean lunch; //员工午餐
? //…… 等等
? public void heater(){ //这个方法是用来加工员工的午餐
? lunch = true;
? }
面向对象编程
? public void setName(String a){ //这个方法是修改员工的
姓名
? name= a;
? }
? public String getName(){ //这个方法是得到员工的姓
名
? return name;
? }
? //…… 等等
? }
面向对象编程
? 想要做的是,有一个员工叫,Jack”,我修改
它的名字后对它进行输出
输出结果是:
my name is John
这串字符串是在输出窗口的 x坐标轴为 10 px,
y坐标轴为 10 px的位置。
面向对象编程
? //workstation.java
? import java.awt.Graphics;
? import java.applet.Applet;
? public class workstation extends Applet{
? private employee Jack ; //对象的声明,此时并不分配内存!
? public void init(){
? Jack = new employee(); /*此时创建对象会调用构造函
数 */
? Jack.setName(“John”); //设置我的名字
? }
? public void paint(Graphics g){
? g.drawString("my name is "+Jack.getName(),10,10);//
显示我的年龄
? }
? }
面向对象编程
? private String name; // 员工姓名
? private int age; //员工年龄
? private char sex; //员工性别
? private float emolument; //员工薪水
? private boolean lunch; //员工午餐
? public void heater(){ //这个方法是用来加工员工的午餐
? lunch = true;
? }
? public void setName(String a){ //这个方法是修改员工的姓名
? name= a;
? }
? public String getName(){ //这个方法是得到员工的姓名
? return name;
? }
面向对象编程
? 语句,private boolean lunch;”
? 公司不管午餐,每个员工都需要带饭。我们现在这样想,公
司的空间是所有的内存容量,你的办公桌就是计算机中的内
存中的一部分( 每个员工都有一份,是在创建对象时分配
的 )。你把午饭带到了公司,放在了你的办公桌上。“午饭”
占据了你的办公桌的一角( 占了你自己“对象”的一块内存
容量 )。这份午饭只属于你自己,同样别人的也只属于她自
己。所以每个员工( 对象 )都需要一快空间( 内存 )来存放
自己的午餐( 属性 )。在计算机中也是这样的,每创建一个
对象,就会在内存中从新分配一块内存来放“午餐 ——
lunch”这个属性( 对象所拥有的所有的属性 )。
面向对象编程
? 计算机只会为对象的属性分配内存。因为每个对象
的都不一样,
? 就像你往公司带的午饭和我往公司带的午饭不一样是一
个道理。但方法就不同了。早晨带的饭中午就凉了,你
需要用微波炉来加热。微波炉不用你带,公司就有(只
占公司的一块空间),它放在了午餐桌上。它属于所有
员工的,因为每个员工都可以用它。而不必每个员工都带
一份。由此可见,每个员工(对象)都有一份午饭(属
性),但所有的员工(对象)只一个微波炉(方法)。
所有的员工(对象)都可以通过这个微波炉(方法)来
改变自己午餐(属性)的冷热状态。在计算机中也就是
这样,方法只有一份,供所有的对象使用。而属性是每
个对象一份,因为每个对象的都不一样。
面向对象编程
? 2.3深入探讨函数
? 2.3.1构造函数、默认构造函数
面向对象编程
? 构造函数,
从特征上来说:
1.它是编程语言中唯一没有返回值类型的函数。
2.它的名称与类的名称必须要完全相同。
3.它必须被声明为公共( public)的类型
4,可以对构造函数进行重载。
5.它在创建对象是自动被调用。
从功能上来说:它是对类中的属性进行初始化。
面向对象编程
? 如果没有自己定义构造函数,系统会自动为
我们定义一个,默认构造函数,。他会把数
值变量自动赋值为 0,把布尔变量赋值为 false
等等(但在 C++中,默认构造函数不初始化
其成员)。如果程序员定义了构造函数,那
么系统就不会再为你的程序添加一个缺省的
默认构造函数了。
? 注,提倡的是自己定义构造函数,而不是用
系统的默认构造函数
面向对象编程
? public employee()
? { //这个就是构造函数
name =,jw”; //设置员工姓名
age = 20; //设置员工年龄
sex =,M”; //设置员工性别
emolument = 100; //设置员工薪水
lunch = false; //设置员工午餐
}
面向对象编程
? public employee(String n,int a,char s,float e,boolean l)
? { //带参数的构造函数
name = n; //设置员工姓名
age = a; //设置员工年龄
sex = s; //设置员工性别
emolument = e; //设置员工薪水
lunch =l; //设置员工午餐
}
? Jack = new employee("Jack",20,'M',100,false);
面向对象编程
? 2.3.2重载构造函数
? 在 JAVA中:
1,函数重载是一个类中声明了多个同名的方法,但
有不同的参数个数和参数类型。
2,函数重构是指在子类中声明与父类同名的方法,
从而覆盖了父类的方法。重构解决了子类与父类的差异
问题。(在讨论到继承时我会详细说明)
面向对象编程
? 在 C++中:
1.函数重载的概念一样。
2,重构的概念可就不一样了,C++中
功能更为庞大的虚函数。
面向对象编程
? 操作符重载
例:我们定义三个整数变量:
int i1=2,i2=3,i3=0;
i3 = i1 + i2;
此时 i3=5;加号实现了两个数相加的运算功能。
然而我们现在要定义三个字符串变量:
String str1=”Ja”,str2=”ck”,str3=””;
str3 = str1 + str2;
面向对象编程
? 函数重载
? 函数名相同,参数不同
? 由于参数类型、参数数量、返回值类型不同我们
就可以对相同名称的函数进行区分
面向对象编程
? 例:重载构造函数
? public class employee{
public employee(String n,int a,char s,float e,boolean l)
{ //构造函数
name = n; //设置员工姓名
age = a; //设置员工年龄
sex = s; //设置员工性别
emolument = e; //设置员工薪水
lunch =l; //设置员工午餐
}
面向对象编程
public employee(){ //请注意这个函数没有参数
name =,Jack”;
age = 20;
sex = ’W’;
emolument = 99;
lunch = true;
}
//…… 等等
};
面向对象编程
? 重载普通的函数与重载构造函数类似,不过
它多了一个 this指针,this一般是对当前对象的
引用。
? 如果涉及到两个以上的对象时就会使用 this指
针。每个成员函数都有一个 this指针,它是一
个隐藏的参数,this指针指向调用它的对象。
方法只有一份,而对象都有自己的属性,当
对象调用方法来更改属性的时候,靠 this指
针指向自己的属性
面向对象编程
? 2.3.3 初始化与赋值
初始化与赋值是完全不同的两个概
念。创建一个类的时候会调用这个类的构造
函数对对象的属性进行初始化。如果以后再
把这个对象赋给其他同类型的对象时,在
JAVA中直接赋值就行了,而在 C++中就需要拷
贝构造函数以及操作符重载了。
面向对象编程
? 2.3.4析构函数:
JAVA中不再支持指针了,所以你感
觉不到它的重要性,因为系统会自动为你释
放内存。而在 C++中一切都是手动的。在构
造函数中 new了一个指针,在析够函数中就
要 delete这个指针。
面向对象编程
? 2.3.5静态:
把一个变量或函数声明为静态的需要
,static”这个关键字。声明静态的目的是“为
某个类的所有对象的某个属性或方法分配单
一的存储空间”。静态的数据是属于类的,
不属于任何的对象。静态的数据在声明的时
候系统就为他分配了内存空间,而不用等到
创建对象时。
面向对象编程
? 静态函数也是属于类的,在定义的时候就分
配的内存。调用是可以使用类名直接调用。
其他的和普通成员函数没什么不同的。
? 注,在 JAVA中,静态的成员函数只能修改静
态的属性,而静态的属性可以被所有的成员
函数修改。
面向对象编程
? 2.4继承
它的最大好处就是“代码重用”,大大提高了工作效
率。
? 例:世界上先有的黑白电视机,它有自己的工作原理。然而
人们在他的基础之上 开发 出了彩色电视机。彩色电视机继承
了黑白电视机的所有的特性与方法!因为它既能显示彩色图
像也能显示黑白图像。然而它与黑白电视机又有许多区别,
在工作原理上。彩色电视及多了矩阵色电路,把彩色信号分
离出三种颜色( RGB),他就能显示彩色的图像了。而黑白
电视机没有这块电路,即使它收到了彩色信号也显示不了彩
色图像。彩色电视机是从黑白电视机中派生出来的。所以,
黑白电视机是父类,彩色电视既是子类,彩色电视继承了黑
白电视机所有的特性与方法。