面向对象的概念
面向对象编程(Object Oriented Programming)简称OOP:
用认识一个系统的方式来分析、设计和实现一个系统
面试答案:封装、继承和多态即为面向对象
面向对象的方法包括:
面向对象的分析(OOA, Object-Oriented Analysis)
面向对象的设计(OOD, Object-Oriented Design)
面向对象的程序设计(OOP, Object-Oriented Program)
面向对象技术主要围绕以下几个概念:
对象、抽象数据类型、类、继承性、多态性。
面向对象VS面向过程:相辅相成
面向过程:
先有算法,后有结构
面向对象:
先有结构,后有算法
面向对象的优点
可重用性(类)
可扩展性(继承)
可管理性(接口)
OOP的四个基本机制
抽象
封装
继承与派生
多态性
=>:抽象和分析
事物(虚拟或现实)=>计算机世界(类)
含义:用类描述复杂(复合)的事物
要求:
数据抽象(变量)---描述某类对象的状态(对象相互区别的物理量);
代码抽象(方法)---描述某类对象的共有的功能。
如何实现抽象:
1.分析事物,提取其状态(变量)和行为(方法);
2.要有主次:关注重要的,忽略不重要的
类(class):一种复杂的数据类型
类之重要:类是程序的基本单元
类的定义语法:
[访问修饰符] [修饰符] class 类名 [: <基类名>] [ ,<接口列表>]
{
构造方法;
析构方法;
[<访问控制符>][<修饰符>] 数据类型 <变量名>;
[<访问控制符>][<修饰符>] 数据类型 <属性名>;
......
[<访问控制符>][<修饰符>] <返回值类型><方法名> ([参数列表]);
}
类、传统类型(int、char、float...)、数组的对话:
传统类型:我可以存储数据
数组:我可以存储很多数据
类:你们都属于我
传统类型:。。。
数组:。。。
传统类型:我出品变量很简单,类型 空格 变量名即可
数组:我出品一组数据也简单,类型[] 空格 变量名即可
类:我也简单 类名 空格 变量名即可
传统类型:。。。
数组:。。。
使用类的方式:和传统类型一致(声明->赋值->使用)
如何声明:
类的变量:又名对象的引用 等待指向对象
类名 变量名;
赋值:
对象的实例化:对象的生成比较复杂 称为实例化
new <类名>([<参数列表>])
将引用指向实例:
格式:变量名=new <类名>([<参数列表>])
使用:
通过引用来寻找对象的变量和方法
对象引用.成员变量
对象引用.成员方法([参数列表])
对象的构造过程
1.为对象开辟空间;
2.调用构造方法初始化;
3.返回对象的引用。
类和对象的关系:
1.类是对象的模板
2.一个类可以创建多个对象
3.对象是类一个特定的个体
4.对象有独立的内存空间,不会互相影响
构造方法=构造函数=构造器
构造方法:
类特殊的成员方法
声明:
构造方法与类同名,且没有返回值类型。
构造可以无参也可带参。
使用:
必须使用new关键字调用
作用:
创建类的实例并初始化对象。
初始化的缺省值都是确定的:
布尔变量的初值为:false
整数变量的初值为:0
浮点数变量的初值为:0.0
字符变量的初值为:'\0'
引用(复合)变量的初值为:null
注意事项:
系统为每个类自动提供一个默认的无参的构造方法;
若自定义构造方法,无参构造方法不再提供
追加:成员方法中的局部变量必须显式手动进行初始化
析构方法:
声明:
~类名()
使用:
程序中的对象有垃圾回收器(garbage collector)负责释放,回收之前会自动调用对象对应类的析构函数,做释放前的准备工作(关闭占用资源等)。
注意事项:
1.一个类只有一个析构方法,没有返回值类型。
2.除非特殊需要,通常被省略。
this :
成员方法中的隐参,是方法所在类的一个引用变量
声明:每个成员方法自带 无需声明
作用:
1.方法被调用时,立即指向调用该方法的对象。
2.区分同名的局部变量和成员变量
3.调用本类的其他的构造方法,拷贝构造中使用较多
拷贝构造:批量无差异产生对象 之后进行少量差异化赋值
有趣的示例:
public class Person
{
int age;
public Person Birthday()
{
this.age++;
return this;
}
public void ShowAge()
{
Console.WriteLine("age = {0}",this.age);
}
}
public static void Main()
{
Person person = new Person(); person.Birthday().Birthday().Birthday().ShowAge();
}