面向对象
类
类是面向对象程序设计实现信息封装的基础。类是一种用户定义的引用数据类型,也称类类型。每个类包含数据说明和一组操作数据或传递消息的函数。类的实例称为对象。
类的实质是一种引用数据类型它的本质是数据类型,而不是数据,所以不存在于内存中,不能被直接操作,只有被实例化为对象时,才会变得可操作。
类是对现实生活中一类具有共同特征的事物的抽象。
类的作用
类的作用是是连接函数调用中主调函数与被调函数的桥梁。
类的作用是为了安全。
类的作用是继承。
类和对象的关系
对象是对客观事物的抽象,类是对对象的抽象。
对象是类的实例,类是对象的模板。
面向对象和面向过程的区别
面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物bai在整个解决问题的步骤中的行为。
以洗衣服为例
面向过程:
1、收集脏衣服
2、拿出洗涤剂
3、添水,开始洗衣服
4、拧干衣服
5、晒干
面向对象:
找个女朋友,让她洗或者买个全自动洗衣机
封装
封装就是把客观的事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的信息隐藏。隐藏实现细节,使得代码模块化。
封装的作用
1.隔离性:
被封装后的对象其外部对象是无法直接访问对象的内部实现细节,内部实现细节的的改动不会影响到外部对象的访问原则(即:对象内部修改后,在公开暴露指定的访问路径不变的情况下,外部访问它的对象是无需修改的),这是隔离性的体现,同时也是实现高内聚,低耦合的最根本的思想之一;
2.可复用性:
被封装后的对象可以被外部多个对象访问,而无需为每个外部对象去指定不同的服务对象;
例如,同一个类Student可以根据实例化的对象不同而不同
Student stu1 = new Student();
Student stu2 = new Student();
//stu1与stu2是调用相同类的不同对象
3.可读性:
被封装后的对象的名称如果命名恰当,那么就能在不看里面的实现细节的前提下,了解该对象的作用;
如何封装
例:将学生的属性封装到了学生类中
class Student
{
string _name;//成员变量,设置姓名
string _sex;//成员变量,设置性别
int _age;//成员变量,设置年龄
string _classroom;//成员变量,设置教室
}
什么情况下封装
保障代码安全性
提高代码独立性,可读性,可复用性
提高内聚,降低耦合
get和set方法在属性封装时的应用
get方法一般是在成员变量私有化后调用其值的方法
set方法一般是在成员变量私有化后设置其值的方法
calss Student
{
private string _name;
get{return;}
set(string n){ _nmae=n;}
}
类的访问修饰符
访问修饰符 | 意义 |
---|---|
public | 公有访问。不受任何限制。 |
protected | 保护访问。只限于本类和子类访问,实例不能访问。 |
internal | 内部访问。 只限于本项目内访问,其他不能访问。 |
protected internal | 内部保护访问。只限于本项目或者子类访问,其他不能访问。 |
private | 私有访问。只限于本类中成员,子类,实例都不能访问。 |
用public修饰即为公开,用private修饰即为私有化
成员变量和成员方法的访问修饰符
成员变量修饰符
public:公有访问,可以被所有包中的所有类访问
protected:保护访问,该修饰符修饰的成员变量若在一个公有类中,那么它可以被所在的类本身,同一个包中的所有类,其他包中该类的子类访问
默认访问修饰符:如果成员变量前没有访问修饰符,那么它为友好成员,他可以被同一个包中的所有类访问。
private:私有访问,该修饰符修饰的成员只能被他所在的类访问,任何其他的类都不能访问,包括它的子类。
成员方法修饰符
公有访问控制符 public 使用public修饰的方法可以作为该类对外的接口
默认访问控制符具有包访问属性,可以被同一个包内的其他类访问
保护访问控制符 protected 使用该访问修饰符的方法可以被该类自身,同一个包内其他类,其他包中该类的子类访问
私有访问控制符 private使用该访问控制符的方法是能被该类自身访问,任何其他类不能访问,包括该类的子类
构造函数
构造函数是在创建给定类型的对象时执行的类方法
构造函数具有与类相同的名称,它通常初始化新对象的数据成员
不带参数的构造函数称为“默认构造函数”。
无论何时,只要使用 new 运算符实例化对象,并且不为 new 提供任何参数,就会调用默认构造函数。除非类是 static 的,否则将为无构造函数的类提供一个公共的默认构造函数,以便该类可以实例化。
构造函数必须是在类里的一级声明,并且命名为类名
class Student()
{
public void Student(){
//构造函数
}
}
构造函数的作用
为对象分配存储空间,对数据成员进行初始化
为什么要创建对象(实例化)
类是一个抽象体,是对一类事物的抽象体;而对象就是一个具体的事物,对象的抽象就是类。
用汽车来举例,类就是汽车的图纸,对象就是汽车,如果要开一辆汽车,不可能开图纸,只有把图纸变成实际存在的汽车才可以开
同理要想调用类的属性和方法,必须先将类实例化
类成员变量和类方法的访问方式
创建类
class Student()
{
string _nmae;
int _chengji;
public getChengji(int x){
_chengji=x;
}
}
访问
Student stu1 = new Student();
//stu1._name 访问成员变量
//stu1.getChengji() 访问成员方法