黑马程序员--面向对象基础知识(01)

原创 2013年12月02日 15:30:54

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------

一. 面向对象的概念

      面向对象(OOP,Object-Oriented programming)不是取代面向过程的,面向对象的巨大优势在于将实体的特征和行为封装到一个独立而且自给自足的代码单元(类)中,以后要用的时候再实例化类对象来用。

 1.类和对象

  • 类是一种数据类型 是用户自定义的数据类型。 类是由一些或者许多相同对象的共有特性(属性和行为)抽象出来然后构造成的,对象的这些属性特性和行为特征就是类的组成部分。
  • 类是模具 是创建对象的模具 是一种抽象的概念 而对象是类的一个实例 是具体的概念!
  • 例如:“学生”是类,“李四同学”是“学生”这个类的对象。类是抽象的,对象是具体的。按钮就是类,某个登录按钮就是对象。对象可以叫做类的实例(Instance)。类就像double,对象就像10.1。

 2.字段

      字段(Field)就是类的状态(不同的对象可能不一样的状态就是字段)。人这个类有姓名、年龄、身高等字段。

注意:眼睛的个数不能做为字段,因为所有人的眼睛个数都一样,没有差异性,记住字段一定要有差异性。

 3.属性

   属性就是将相应的私有字段通过封装成公共属性(快捷键:ctrl+R+E),以便于外界访问和修改。通俗的说,就是通过一个public变量来保护private变量的合法性。在这个属性中,我们还有get/set方法。(一旦对属性进行赋值,我们会直接调用属性的set方法 )

  属性分为三种:

 (1)读写属性,具有get/set方法的属性

 (2)只读属性,只有get方法的属性,这个属性只能读取,不可以被赋值

 (3)只写属性,只有set方法的属性,之歌属性只能写,不能读取

  •  编写规范:属性开头字母大写,字段开头字母小写
  • 字段和属性的区别是什么?属性看似字段、不是字段,可以进行非法值控制,可以设置只读。允许外部访问的值一定要声明为属性。
  • 用反编译器可以发现set、get块内部其实就是get_***、set_***方法。

     例如:Person类中定义了一个Age属性 用来存取age字段的值

  class Person 
    {
        private int age;//定义一个私有字段
        public string name;  //公有字段  
        public int Age//属性存取age字段值
        {
            get{return age;}
            set{age=value;}
        }
        public void SayHello()//定义一个方法
        {
      Console.WriteLine("大家好,我叫{0},我今年{1}岁了",name,this.Age);       
       }
    }

4. 方法

    方法Method(函数),方法就是类能够执行的动作,比如问好、吃饭等。例如:上例当中的SayHello()方法

5.  定义类的语法

     .类定义语法:

                     [访问修饰符] class 类名

       {

        成员    //类的属性和方法       

       }

      .类的实例化语法:

      类 实例名=new ();

    例如: 下面定义了一个类, Person tom = new Person();//产生一个叫做tom的实例 并且通过对象tom调用类中的方法和字段

 class Person 
    {
       public string Name;
        public int Age;
        public void SayHello()
        {
            Console.WriteLine("你好,我是{0}",Name);
        }
    }
初始化对象,调用方法:
            Person tom = new Person();
            tom.Name="tom";
            tom.SayHello();
Console.WiteLine("{0}",tome.Name)


6. 类中成员访问级别

     字段、方法、属性都可以叫做类的成员Member,它们都需要定义访问级别。访问级别的用处在于控制成员在哪些地方可以被访问,这样达到面向对象中“封装”的目的。

    类中成员访问级别类型:    

  •  public 在任何地方都可以被访问
  •  private 只能在本类中被访问
  •  internal只能在本项目中被访问
  •  protected只能在本类和子类中被访问
  •  protected internal 只能在本项目和它包含类的子类中访问

注意:在类这个级别,不写访问修饰符,默认为internal; 在类的里面,方法外边,不写访问修饰符,默认为private

   

7. 构造函数

  • 构造函数用来创建对象,并且可以在构造函数中对对象进行初始化
  • 构造函数是用来创建对象的特殊函数,函数名和类名一样,没有返回值,连void都不用
  • 构造函数可以有参数,new对象的时候传递参数即可
  • 如果不指定构造函数则类有一个默认的无参构造函数,在这个方法中我们什么也不做,也什么也看不到
  • 如果制定了构造函数,则不再有默认的无参构造函数,如果需要无参构造函数,则需要自己来写
  • 构造函数可以重载,也就是有多个参数不同的构造函数

  构造函数例子: 

   class Person

    {

        public Person(string name,int age,char sex)  //定义一个构造函数

        {

       this.name = name;  //this.name表示当前实例的字段,后边name的值表示传过来的数

            this.sex = sex;

            this.age = age;

      }

        string name;

        public string Name  //将字段封装成属性

        {

            get

            {

                return name;

            }

        }

        char sex;

        public char Sex

        {

            get { return sex; }

            set { sex = value; }

        }

        private int age;

        public int Age

        {

            get { return age; }

            set {

                if (value >= 0)

                    age = value;

                else

                    age = 0;

            }

        }

  public void SayHello()

        {

          Console.WriteLine("大家好,我叫{0},我今年{1}岁了,我是{2}生",name,age,sex);

        }

    }

在Main()中:

           Person zs = new Person("张", 18, '男'); 

           zs.SayHello();

构造函数的重载(函数名相同,参数个数不同)

        public Person(string name,int age,char sex)

        {

            this.name = name;

            this.sex = sex;

            this.age = age;

       }

         public Person(string name)

        {

            this.name = name;

        }

 8. static关键字

  • static意思是静态,可以修饰类、字段、属性、方法
  • 标记为static的就不用创建实例对象调用了,可以通过类名直接点出来。比如C#控制台操作的Console类里面的成员就被标记为静态的,可以直接用Console.直接点出来使用。
  • 如果没有标记为静态就要通过创建实例对象来调用,比如说动态字符串StringBuilder就要new一个实例来调用

例如:

   StringBuilder sb =new StringBuilder();

   sb.xxx(); //xxx是方法名


    

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------

android基础知识01——Timer

Timers主要是用来在后台运行一些任务。可以把Timer设置为守护线程。当调用cancel时所有已经安排的任务都没会被取消。 Timer中的任务是依次执行的,如果一个任务花很长时间才执行完,那么它...
  • jf3612797
  • jf3612797
  • 2013年04月18日 17:49
  • 323

ArcGIS的基础知识(01)

关于Gis中的数据类型:ArcGis中数据类型有两种,一种是栅格的,还有一种是矢量的。两者各有优点,简单点说就是栅格简单而矢量精确。具体到某个项目中要用那种数据类型要视情况而定。 GIS文件的相关知...
  • jinshaogui107
  • jinshaogui107
  • 2015年10月08日 22:48
  • 250

Swift基础知识_01

import Foundation // 1.介绍swift的特点 // a.语句结束后可以不用加分号 // b.访问对象的属性和方法都用点语法 // 2.变量和常量 // a.常量用 "let"...
  • zhongqing_fzq
  • zhongqing_fzq
  • 2015年10月15日 22:22
  • 78

计算机网络:基础知识01

计算机网络基础知识 1.因特网的概述    网络是由若干结点和连接这些结点的链路组成的。如图(a)                         网络和网络可以有路由器连接起来形成一个更大的网...
  • tremblet
  • tremblet
  • 2017年02月21日 14:53
  • 357

接口测试-基础知识-01

一、接口的定义 我们常说的接口一般指两种: (1)API:应用程序编程接口。程序间的接口 (2)GUI:图形用户界面。人与程序的接口 这里我们所说的接口特指API接口。 ...
  • duzilonglove
  • duzilonglove
  • 2017年11月29日 17:28
  • 27

HTML 基础知识01

1. HTML标签类型: HTML5新增了27个标签元素,废弃了16个标签元素,主要包括结构性标签、级块性标签、行内语义性标签、交互性标签 1.结构性标签   article   文章主体内容(一...
  • Baby_come_here
  • Baby_come_here
  • 2016年05月06日 12:41
  • 298

css中的一些基础知识-01

css引入 外部引入: 1.一个css可以控制多个html页面. 2.方便改版和维护. 3.有效利用浏览器的缓存,实现加载更快. 4.相对于整站来说,代码更少,更加方便于分工合作. 5...
  • liuwen_930129
  • liuwen_930129
  • 2016年02月22日 20:11
  • 115

Android基础知识01

#1.1G-4G g:generation 代 3g:第三代移动通信技术 1g: 大哥大 特点:安全性差,容易受干扰,通话不稳定,不能发短信 2g:小灵通等功能机 特点:通话质量稳定,可以发短信彩...
  • a820703048
  • a820703048
  • 2017年03月26日 00:02
  • 96

正则表达式基础知识01

使用元字符 匹配数字: \d [0-9] \D [^0-9] 匹配字母数字 \w [0-9a-z...
  • wenwen1538
  • wenwen1538
  • 2014年11月08日 20:18
  • 651

java 基础知识——01

1.  java JVM  虚拟机  及   跨平台原理?           1.  JVM也是一个软件,不同的平台有不同的版本。           2.  Java虚拟机就是负责将字节码文件...
  • AQ_xiaobin
  • AQ_xiaobin
  • 2017年01月09日 13:41
  • 93
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:黑马程序员--面向对象基础知识(01)
举报原因:
原因补充:

(最多只允许输入30个字)