黑马程序员学习日记(2)--面向对象基础
来源:互联网 发布:淘宝贝高瞻幼儿园 编辑:程序博客网 时间:2024/05/22 09:51
---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ------------------------
面向对象基础
面向对象不是取代面向过程。它的三个特性:封装、继承、多态。面向对象知识简化开发,弥补面向过程的一些不足,实际上的思维方法还是面向过程。
面向对象的几个概念:类、对象。
类
类:一些具有相同事物特征的集合,这些特征属性的实例就是一个对象。类是抽象的,对象是具体的(instance实例)。类不占内存,对象才占内存。
类中包含了属性、字段和方法。
方法:方法就是类能够执行的动作。
类的继承:类之间可以有继承关系。如:电脑相对于电器只要有自己的字段、方法就可以了,所有电器都有的属性电脑就不用写了。电器是电脑的父类(ParentClass),电脑是电器的子类(ChildClass)。基类(Base),电器类从其他(家用电器类)继承,只要是父类从其它类继承过来的,其它类都是本子类的基类。
定义一个类:Class+类名{属性;方法;}
类声明完毕,要用这个类首先要对类初始化。
class Program { static void Main(string[] args) { Person p1 = new Person();//实例化一个对象 p1.gender = "男"; p1.name = "李记者"; p1.age = 22; p1.SayHello(); Console.ReadKey(); } } //声明一个类 class Person { public int age; public string name; public string gender; /// <summary> /// 类的内部声明方法 /// </summary> public void SayHello() { Console.WriteLine("大家好,我叫{0},我今年{1}岁了,我的性别是{2}性",this.name,this.age,this.gender);//this.表示我自己的**** } }
成员的访问级别设置,
这样达到面向对象中封装的作用:public(任何地方都可以访问)、private(默认级别,只能由本类中的成员访问)。还有internal(内部成员,只在同一程序集的文件中才可以访问的)、protected(声明保护成员,只能被类内部和派生类的函数使用和修改)来那个级别。如果把类的属性或者方法改为private则只能在内部使用改变,外部实例无法改变、调用。用public或者用字段外部可以随意的修改类的属性,但是用private,可以在类的内部进行控制。
class Program { static void Main(string[] args) { Person2 p2 = new Person2(); //p2.name无法对private方法的属性赋值 p2.GiveNickName("张三");//通过类内部的方法控制,把值传递给里边的字段 Console.ReadKey(); } }class Person2 { public int age; public int height; private string name;//字段定义成了private后外部将不能调用 //外部不能直接给name赋值,但是可以通过类内部的方法控制,给他值,达到封装的目的 public void SayHello() { Console.WriteLine("我叫{0}",this.name);//类的内部可以调用private型的字段 } public void GiveNickName(string nm) { //通过类内部的方法控制,给他值,达到封装的目的 if (nm == "张三") { return; } this.name = nm; } }
属性:
属性开头字母大写,字段开头字母小写。它定义了得到和修改相关字段的方法。
属性更充分地体现了类的封装性:不直接修改类的数据内容,而是通过访问其进行控制,借助Get方法和Set方法对属性的值进行读/写。
set(赋值),get(取值)先后顺序无所谓,value就代表用户赋值过来的值
static void Main(string[] args) { p3.Age = 20; //Console.WriteLine(p3.Age);这样形成了死循环,并没有把值赋给age Console.WriteLine("年龄{0}",p3.Age);//经过了set,字段age已经具有了值,然后get就可以取出,封装完成了 Console.ReadKey(); }class Person3 { //属性 private int age;//字段 public int Age//Age不存值而是把值给了age { //属性,set、get无先后顺序,以此达到封装的目的,省的每次都要写一个方法给一个private字段 get { return this.age;//取出这个类中private字段age的值 } set { if (age <= 0) { return; } this.age = value; //value是用户输入的值,把它赋给字段age } } }
属性使用的注意事项:虽然属性和字段的使用方法类似,但是属性的本质是方法,因此不能把属性当成变量,一些使用变量的地方不能使用属性,例如:不能把属性作为函数的引用型参数或输出参数。
-------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ----------------------
- 黑马程序员学习日记(2)--面向对象基础
- 黑马程序员--学习日记(三)面向对象基础
- 黑马程序员Java学习日记(2)面向对象
- 黑马程序员——学习日记之面向对象基础
- 黑马程序员—Java入门学习日记基础篇-面向对象总结2
- 黑马程序员-C#面向对象学习日记
- 黑马程序员学习日记--面向对象二
- 黑马程序员_JAVA学习日记_面向对象2
- 黑马程序员学习日记 (三)面向对象
- 黑马程序员-iOS学习日记(三)面向对象-方法
- 黑马程序员-----面向对象_内部类(学习日记)
- 黑马程序员学习日记--面向对象(一)
- 黑马程序员——(学习日记——面向对象)面向对象常见对象
- 黑马程序员_学习日记34_528基础加强(面向对象)
- 黑马程序员——学习日记5 java面向对象基础
- 黑马程序员—Java入门学习日记基础篇-面向对象总结1
- 黑马程序员—Java入门学习日记基础篇-面向对象总结3
- 黑马程序员—Java入门学习日记基础篇-面向对象总结4
- 五险一金-社保基数-住房公积金基数以及个税(彻底总结)
- 编码:隐匿在计算机软硬件背后的语言
- Mysql常用 命令行操作总结
- MySql学习很好的东西 表格数据导入数据库
- ubuntu下将apache-solr-3.6.2 如何配置到tomcat下
- 黑马程序员学习日记(2)--面向对象基础
- baidu宝库
- CvMat
- LeetCode-Reverse Integer
- 执行计划和直方图
- iOS常用动画
- Oracle_基本查询
- UVA 112 Tree Summing
- CvMatND