面向对象是一种编程思想,是一种看待问题,解决问题的思维方式。关键在于找到一个能够帮助解决问题的实体,然后委托这个实体解决问题。
面向过程是一种看待问题,解决问题的思维方式。关键在于问题是怎样一步步的解决的,然后亲力亲为的解决问题。
1.类和对象
类:是一系列具有相同功能和属性的对象的集合;
对象:能够帮我们解决问题的实体;
2.类的设计
class 类名{
//类名是一个标识符
//类名需要首字母大写
//类名需要遵循驼峰命名法
//在一个类中,允许声明另外的一个类,但是不推荐(内部类)
//在类中可以定义这个类的每一个对象都具有的属性和功能
//属性:是以全局变量的形式来写的
//功能:是以方法的形式来写的
}
3.static关键字
static关键字可以用来修饰类的属性和方法
被static修饰的属性和方法--静态属性和静态方法
静态的属性和方法是属于类的,在访问静态属性和方法的时候,需要拿类来访问;
非静态的属性和方法是属于对象的,在访问非静态的属性和方法的时候,需要拿对象来访问;
静态属性存在静态区,不在堆上开辟空间;
静态属性开辟空间的时机:类被加载到内存中的时候开辟空间,程序运行的时候;
在静态方法中不允许直接访问非静态的属性和方法;
在非静态方法中,既可以访问静态的属性和方法,也可以访问非静态的属性和方法
4.this关键字
表示对当前对象的引用,this不能在静态方法中调用
5.Sealed关键字
Sealed使用来修饰类的,表示这个类不能被继承(密封类)
6.readonly关键字
readonly修饰的属性,只能在声明的时候和在构造方法中赋值
7.面向对象的三大特性
封装:把一段重复执行的代码抽取出来
继承:如果有多个类具有相同的属性和功能,那么我们可以把相同的部分抽取出来,单独做一个类;
被抽取出来的这个类:父类(基类)(超类)
具有相同属性和行为的类:子类(派生类)
关系:子类继承自父类
继承的特点:
--子类拥有父类中所有的属性和方法(构造方法除外)
--子类在继承了父类所有的属性和方法后,还可以再写自身特有的属性和方法
--一个类只有一个父类,但是一个类可以有多个子类(单继承)
--子类的访问权限必须小于等于父类的访问权限
继承中的内存分析:
--一个对象在堆中的空间由两部分组成:父类部分和子类部分;
--在实例化一个对象的时候,优先开辟父类部分空间;
继承中的构造方法:
--构造方法不能被继承
--子类的构造方法在执行前,会默认先调用父类中无参的构造方法
8.访问权限
用来约束某个属性或方法,类能够被使用的范围
关键字 可以约束的范围 可访问的范围
public 属性、方法、类 任意位置
internal 属性、方法、类 仅限当前项目中
protected 属性、方法 在当前类、子类中
private 属性、方法 当前类中
protected internal 属性、方法 当前项目和跨项目的子类中
--类中的属性和方法的访问权限默认为private
--类的默认访问权限为internal
9.(属性)访问器
是用来访问一个属性的;
一半访问器的名称为属性的名称(首字母大写)
访问权限修饰符 要访问的属性的类型 访问器名称{
//其中,必须要包含set和get中的至少一种
//如果只有set,表示这个属性访问器只能写
//如果只有get,表示这个属性访问器只能读
}
10.Virtual关键字
--使用关键字virtual修饰的方法是虚方法
--虚方法可以被重写,也可以被隐藏
--非虚方法只能被隐藏,不能被重写
--C#中,方法默认的都是非虚方法
方法的隐藏:
对于父类中的虚方法,子类有自己的实现方式,需要使用new关键字来修饰方法,表示隐藏父类的实现方式
如果子类隐藏父类的方法,那么子类中有两种方法,父类中的方法和子类中的方法不是同一个方法
方法的重写:
对于同一个方法来说,子类和父类有着不同的实现,在子类中重新实现这个方法叫做重写,用override关键字来修饰
子类中的方法和从父类中继承到的方法其实是同一个方法
11.多态初步
对象的向上转型:
将一个子类类型的对象转成父类类型
向上转型后的对象,将只能访问父类中公有的属性和方法,不可以访问子类中特有的属性和方法
对象的向下转型:
将一个父类类型的对象转成子类类型(向下转型可能会失败),需要强制类型转换
向下转型后的对象,可以访问子类中特有的属性和方法