黑马程序员_面向对象基础

1.类和对象

面向对象技术,也简称OOP。前面说了,它是一个编程思想,既然是思想,它就适用于任何支持面向对象编程的语言。虽然不同的面向对象语言都有其各自的特点,但是万变还是不离其宗的。

1.什么是类?

首先了解几个概念,什么是类?这个其实很容易理解,在现实中我们常说,物以类聚、人以群分。这里的类,和我要解释的类,概念上是一样的,都是现实中一些拥有共同属性、特征的事物。就像,人类,犬类,猫类等,它们通常都是抽象的描述了,一类事物,不是具体指的指某一个,人啊,狗啊,猫啊,这样的,而是它们的统称。

定义格式:

class <类名>{

//类中的成员

}

类名的定义,使用帕斯卡命名法。类的定义是用 class关键字

2.什么是对象?

知道了类之后,对象就很容易理解了,它是由类所生成的一个具体的实例。比如人这个类,是人类的统称,而用人这个类,所生成的对象,指的是具体的某一个人,这个对象具有人这个类的一切属性,因为对象是类的具体的实例。

代码演示,如何在一个类中生成另一个类的对象:

//先定义一个类

class Person{

//类中的成员

}

class Program{

static void Main(string[] args){

Person <对象名>;//声明了类的变量,但是没有实例化

<对象名> = new Person();//调用类中空参数的构造函数,实例化

}

}

类的实例化,也就是生成类的对象,只是叫法不一样而已。类的实例化用到了new关键字,调用类的构造函数,由于我的Person类,没有写构造函数,编译器在编译的时候会为我们自动的添加一个空参数的构造函数,如果你写了,编译器,就不会加了,就用你的构造函数。

两行代码也可以简写成一行,具体看需要;

3.类和对象的关系

一个类能够生成无数的对象,而一个对象只能是一个类所生成的。一个类可以有无数个实例,但是一个示例肯定只对应生成它的一个类;

2.属性、字段和方法

这些东西,都是类中的成员,刚开始的时候,我十分的迷惑,属性这个东西,常常以为它也是变量,但是后来才清楚,它是用来维护字段的。

1.什么是字段?

字段就是用来描述类的特征的,比如说人这个类中,人都有姓名,年龄,性别等共同的特征,这些特征我们可以用字段来定义。

定义:

<权限修饰符> <静态修饰符> <字段类型> <字段名>;

在定义的时候,也可以直接的初始化。私有的字段采用驼峰命名法,共有的则是帕斯卡命名法,但绝大多数都是私有的。权限默认是私有的。静态修饰符,选择性的加入;

字段也可以被readonly关键字,所修饰。被它修饰的字段,只可以在构造函数和定义的时候初始化。

2.属性

个人认为呢,属性是字段的修改器。因为面向对象有个特性,那就是字段,要的权限,尽量要私有起来,不让随便的修改,而属性,则为我们提供了,绿色通道,可以使用它来修改字段中值。

定义:

public <返回值类型><属性名>{

  set{

              <字段> = value;

         }

         get{

               return <字段>;

          }

}

这是一个标准的属性定义方法。两个字段是同一个字段,这看起来有点像方法,但是它没有参数列表,这是最大的区别。并且它的权限必须是非私有的,不然就失去了,它存在的意义了;如果省略其中的一个,就变成了只读,或只写的属性了;

自动属性定义格式:

public <属性名>{set;get;}

创建自动属性,我们都不用创建要修改的字段,而是直接创建属性,就可以了,其它的编译器在编译时都会为我们完成。但是这样有一个限制,就是不能定义只读,或只写的属性;

3.方法

方法也就是我们之前讲的函数,只是叫法不一样,它是类中的成员。

3.构造函数深入

构造函数其实也是可以重载的,和普通的函数重载一样,函数名相同,参数列表不同,就可以了。构造函数的重载可以为我们提供不同的初始化类的实例的方法。另外构造函数,前面也提到了,如果没有写构造函数,编译器会为我们加,如果写了,就用你的。如果你只写了一个几个参数的构造函数,那么类在初始化的时候,就只能传入那几个固定的参数,这样会相当的有限制,所以通常情况下,我们都是写一个空参数的构造函数,和若干个带参数的构造函数;

此外还有静态的构造函数,和静态类,下面将详解

1.什么是静态的构造函数?

它和构造函数的定义就有点区别了,虽然同样都是在类中,但是它是这样定义的:

static{

//静态的构造函数代码块

}

它的作用呢,主要是初始化,类中的静态变量,它是优先于对象的,在加载类,生成对象的时候,首先会调用静态的构造函数;

2.静态类

顾名思义,使用static所修饰的类,它有一个特点,就是它里面的成员,必须都是静态的,且它不能被实例化。既然不能被实例化,那么也就是不需要构造函数,但是它可以有一个静态的构造函数。

4.静态成员

之前也讲到了,静态的成员。像静态的函数,变量啊。只是说了,它的作用,并没有解释究竟是为什么。

概念

静态是相对于动态来说的,静态也就是固定不变的意思。一旦一个类中定义了一个静态的成员,你就要想到,它和类绑定了。无论这个类生成了,多少个对象,在使用到这个类的静态成员的时候,使用的都是这个类中的这个成员。而不是哪一个单独对象中的静态成员。因为静态成员属于类,而不副属于某一个对象,只要是类所生成的对象,都可以访问到类中的静态成员;

5.面向对象的特性

面向对象拥有三个非常关键的特性:封装,继承和多态性;还有像抽象类,和接口这样重要的特性;

1.封装性

前面我在定义类中成员的标准格式中,都讲到了,权限修饰符。而权限修饰符就是封装性的最主要体现之一。封装性的意思是说,在保证程序正常运行的基础之上,尽量的减小类中成员的访问权限大小。

权限修饰符

private:权限最小(默认权限),用它定义的成员,只能在本类中被访问;

protected:只能被该类的派生类所访问,后面会讲到什么是派生类;

internal:内部权限,一个项目中的类可以访问;

public:权限最大,任何地方都可以访问,通常用在属性上;

2.继承性

继承性在面向对象中极其的重要,可以最大程度的为我们,减少重复代码。它的意思是指,一个类可以从一个类中继承它里面成员。就像儿子继承老子的遗产一样。

3.多态性

多态性是建立在继承性的基础之上的,它可以使程序更加的灵活。它的意思是说一个变量可以有多种状态,不仅可以访问它的本身,也可以访问到它的基类;

4.抽象类

抽象的意思是指含糊不清,描述一个事物,说的十分笼统。抽象类就是这样的,在现实中的一些事物,并不都是那么具体的。所以程序设计中抽象类,就显得很有必要。就比如说车这个类,它就十分的抽象,它又可以派生出汽车类,火车类啊。。,像这种十分抽象的事物,而且天生就是要被用来继承的类,称为抽象类。

特点:类中可以有抽象的成员,也可以有不抽象的。一个类继承了它之后,如果没有覆盖掉它里面抽象的成员,那么那个类,就还是抽象的。只有抽象成员全部覆盖,那个类才不算抽象;

5.接口

接口是一种协议,它为我们的程序提供一个标准。就像是USB接口一样,它是一种传输数据的协议,只要遵守我的传输协议,优盘啊,读卡器啊,手机啊都可以连接电脑。这对程序的后期维护来说意义重大,如果程序需要升级,我们就不用再删除重写代码,我们可以在原有代码的基础之上,添加拓展接口,实现无缝的程序升级。

这篇文章大多是文字性的概念性总结,大家先留个印象,下一篇更多的是代码演示。

时间: 2024-11-13 20:12:28

黑马程序员_面向对象基础的相关文章

黑马程序员_面向对象基础之封装与继承

-----Java培训.Android培训.iOS培训..Net培训.期待与您交流! 封装 1.1 基本概念  封装(encapsulation)是面向对象三大特征之一,它是指将对象的状态信心隐藏在对象的内部,不允许外部直接进行访问,而是通过该类提供的方法来实现对内部信息的操作和访问.封装的作用如下: ※ 隐藏类的实现细节. ※ 让使用者只能通过实现预定的方法来访问数据,从而可以在方法里添加逻辑控制,限制对类成员的不合理访问 ※ 可以进行检查,从而有利于保证对象信息的完整性. ※ 便于修改,提高

黑马程序员_面向对象

------- <a href="http://www.itheima.com" target="blank">android培训</a>.<a href="http://www.itheima.com" target="blank">java培训</a>.期待与您交流! ---------- 在Java的开发过程,其实就是不断的创建对象,使用对象,指挥对象做事情.设计的过程,其

黑马程序员_面向对象解决的一个小问题,觉得还好,就存一下

/** *10. 一位老农带着猫.狗.鱼过河,河边有一条船,每次老农只能带一只动物过河. *当老农不和猫狗鱼在一起时,狗会咬猫,猫会吃鱼,当老农和猫狗鱼在一起时,则不会发生这种问题. *编程解决猫狗鱼过河问题. * *分析: * 问题中的对象:猫.狗.鱼.老农.岸1(这岸).岸2(对岸) * * * 限制条件是:老农每次只能带一只动物过河 * 老农不在时,狗咬猫 * 老农不在时,猫吃鱼 * 目标是:将猫.狗.鱼从这岸运到对岸. * 当农夫到达一个岸后,即为一个中间状态,则这个中间状态需要满足,岸

黑马程序员_面向对象与类的分析

一.面向对象的概述: java是一种面向对象的编程语言,也就是说对象是这种语言的基础,没有对象了,就没有了java.任何功能都是通过对象来实现的,就是将功能封装进对 象,让对象去调用这些功能.这种思想是将数据作为第一位,而方法(功能或者说是算法)作为其次.我个人认为,这是对数据的一种优化,安全性更高,操作起数据来一更方便. 那么将这种思想提升到一种境界就是:万物皆对象. 1.对面向对象的理解: 1)面向对象是相对面向过程而言的,且基于面向过程的. 2)面向对象是一种思想. 3)面向对象将功能封装

黑马程序员_面向对象深入2

1.抽象类 抽象类是一个类的抽象化描述,和普通类的定义成员的方法一样,只是如果要定义抽象成员的话,则需要使用到abstract关键字.通常在程序的设计中,把主体的类功能放在抽象类中,让其它类去继承.抽象类不能被实例化,除了使用多态性.所以它的天性就是被别人所继承: 定义示例: abstract class Animal{ private string name; private string color; private int age; //属性 public string Name{ set

黑马程序员_面向对象之抽象类与接口

抽象类(abstract)???? 当编写一个类时,时常会为该类定义一些方法,这些方法的使用用以描述该类的行为方式,那么这些方法都有具体的方法体.但是在某些情况下,某个父类只是知道子类应该包含怎样的放过,但是无法精确的知道这些子类是如何实现这些方法,例如定义一个GetTime类,该类提供了一个计算某一段程序运行时间的gettime方法,但是无法知道具体运行什么方法体,这时就需要使用抽象方法来实现了. 抽象类概念 当多个类中出现相同功能,但是功能主体不同,这时候可以进行向上抽取,只抽取功能定义,而

黑马程序员_毕向东_Java基础视频教程_Java基础学习知识点总结

黑马程序员_毕向东_Java基础视频教程 Java基础学习知识点总结 2016年01月06日  day01 一.基础知识:软件开发 1.什么是软件?软件:一系列按照特定顺序组织的计算机数据和指令的集合. 2.常见的软件:系统软件:如:DOS,Windows,Linux等.应用软件:如:扫雷,迅雷,QQ等. 3.什么是开发?制作软件. 二.基础知识:人机交互方式 4.软件的出现实现了人与计算机之间的更好的交互. 5.交互方式:图形化界面:这种方式简单直观,使用者易于接受,容易上手操作.命令行方式:

【黑马程序员】————面向对象语法2

一.      set方法和get方法 1.          set方法和get方法的使用场合 @public的成员可以被随意赋值,应该使用set方法和get方法来管理成员的访问(类似机场的安检.水龙头过滤,过滤掉不合理的东西),比如僵尸的生命值不能为负数 成员变量尽量不要用@public 2.          set方法 1)       作用:提供一个方法给外界设置成员变量值,可以在方法里面对参数进行相应过滤 2)       命名规范: 1> 方法名必须以set开头 2> set后面

黑马程序员_第一天视频学习

一.      计算机和软件常识 1.      计算机运行原理 1)          硬件基本组成:硬盘.内存.CPU 2)          各个部件之间的运作协调(下图) 2.      计算机只能识别0和1 1)          0和1组成的指令 2)          0和1组成的数据 3.      计算机和软件的联系 1)          软件的基本概念:指令的集合 2)          软件的安装运行过程 3)          为什么要开发软件:写出能控制计算机的指令