目录
2.2、面向对象的三个特性(若有四个的话可以加一个抽象性):
一、面向对象与面向过程
1、面向过程:
强调的是功能行为,以函数为最小单位,考虑怎么做
2、面向对象:
强调具备了功能的对象,以类/对象为最小单位,考虑谁来做
2.1、 一个简单的理念:
需要完成某种任务时,首先要想到,谁去完成任务,即哪个对象去完成任务;提到数据,首先想到着数据是哪个对象的!!!!
2.2、面向对象的三个特性(若有四个的话可以加一个抽象性):
>封装:面向对象的编程的核心思想之一是将数据和对数据的操作封装在一起。即从具体的实例中抽取出共同的性质形成一般的概念。
>继承:体现了一种先进的编程模式(子类可以继承父类的属性和行为,即继承父类所具有的数据和数据上的操作,同时又可以则改天子类独有的数据和数据上的操作)
>多态:有两种意义上的多态。一种是操作名称的多态,即多个操作有相同的名字,但这些操作所接受的消息类型必须不同。另外一种是和继承有关的多态,是指同一个操作被不同类型的对象调用时可能产生不同的行为
二、面向对象的两个要素:类和对象
类:对一类事物的描述,是抽象的,概念上的定义(如:抽象概念上的人)
对象:是实际存在的该类事物的每个个体,因而也被称为实例(如:一个实实在在的人)
面向对象程序设计的重点是类的设计即类的成员的设计
步骤:>创建类
> 创建类的对象
>通过“对象.属性”“对象.方法”进行调用。
三、类
1、 类的定义包括两部分:类声明和类体
基本格式为:
权限修饰符 class 类名{
类体的内容
}
注意:如果类名使用拉丁字母,那么名字的首字母使用大写字母;类名最好容易识别、见名知意,每个单词的首字母应大写(驼峰习惯).
2、 变量的声明:
用来储存属性的值(体现对象的属性)。
3、方法:描述类应该具有的功能
3.1 一般格式:
方法头{
方法体内容
}
> 方法头:方法头由方法的类型、名称和名称后的一对小括号以及其中的参数列表所构成(无参数方法定义的方法头中没有参数列表)。
>方法体:在方法体中声明的变量和参数叫局部变量,只在局部有效,而且与其声明的位置有关,从声明它的位置开始生效。
>方法名属于标识符
3.2 方法中的成员变量和局部变量不同
3.2.1 方法中的变量类型
包括基本类型(整型、浮点型、字符型、逻辑类型)引用类型(数组、对象和接口)
3.2.2 有效范围:
成员变量在整个类内都有效,其有效性与在类体中书写的先后无关(但是不提倡把成员变量分散写)
局部变量只在局部有效,而且与其声明的位置有关,从声明它的位置开始生效
3.2.3 编程风格
> 一行只声明一个变量。
> 变量名除了符合标识符规定之外,名字的受单词的首字母用小写还有驼峰习惯。
> 变量起名见名知意,避免1和l相邻因为很难区分
3.2.4 权限修饰符不同
属性:可以在声明属性是时指明其权限,使用权限修饰符。常用的有:private、public、protected、缺省。--->类的封装性
局部变量不允许用权限修饰符。
3.2.5 成员变量有默认值但是局部变量没有
>成员变量默认初始化值:
>在调用局部变量之前要先显式赋值,特别的,形参在调用时赋值即可
3.2.6成员变量与局部变量的加载位置不同
>属性:加载到堆空间(非static)
>局部变量:加载到栈空间
注意:对于成员变量的操作只能放在方法中,方法使用各种语句队成员变量和方法体中声明的局部变量进行操作。
3.3 返回值类型:有返回值/没有返回值
有返回值时必须在方法声明时,指定返回值的类型,同时方法中需要使用return关键字来返回指定类型的变量或常量。
如果方法没有返回值,则在方法声明时使用void来表示。可以使用“return;”
3.4 方法的重载
3.4.1:方法的重载:在同一个类当中,允许存在一个以上的同名的方法,只要它们的参 数个数或者参数类型不同即可。
“两同一不同”:同一个类、相同方法名
参数列表不同:参数个数不同、参数类型不同
3.4.2:重载的特点:与返回值的类型无关,只看参数列表,且参数列表必须不同。(参数个数或者参数类型)调用时,根据方法参数列表的不同来区别。
3.4.3:判断是否重载与方法的权限修饰符、返回值类型、形参变量名、方法体等都没有关系!!!!!
3.4.4:在通过对象调用方法时,如何确定某一个指定的方法:
方法名-->参数列表
3.5 可变个数的形参的方法:
3.5.1:具体使用:
格式:数据类型...变量名
3.5.2:当调用可变个数形参的方法时,可以是0个、1个....等。可变 参数的方法与本类中的方法名相同形参不同的方法之间构成重载
3.5.3:须注意的是:可变个数形参的方法与本类方法名相同,形参类型也相同的数组之间不构成重载。
3.5.4:关于变量间的赋值:
如果变量是基本数据类型,此时赋值的是变量所保存的数据值
如果变量是引用数据类型,此时赋值的是变量所保存的数据的地址值
3.5.5:普通方法中调另外一个方法可以不用造对象。
3.6 方法的重写
在子类当中可以根据需要从父类中继承来的方法进行改造,也称为方法的重置、覆盖。在执行程序时,子类的方法将覆盖父类的方法。
3.6.1 在重写以后,当创建子类对象以后,通过子类对象调用父类同名同参数的方法时,实际执行的是子类重写的方法。
3.6.2 重写的规定:
*子类重写的方法与父类被重写的方法的方法名和形参列表相同。
*子类重写的方法的权限修饰符是不小于父类中该方法的权限修饰符
>特殊情况:子类中不能重写父类中权限为private的方法
*返回值类型:
>父类中被重写的方法的返回值类型是void则子类重写方法的返回值类型也只能是void
>父类被重写的方法的返回值类型是A类型,则子类重写的返回值类型可以是A类或者A类的子类。
>父类被重写的方法的返回值类型是基本数据类型,则子类重写发返回值类型也必须是相同的基本数据类型。
*子类重写的方法抛出的异常类型不大于父类被重写的方法抛出的异常类型。
Attention:子类和父类中的同名同参数的方法要么都声明为非static的(重写),要么都声明为static(不是重写)
4、构造器(构造方法、constructor)的使用
4.1 构造器:
构造器是类中的一种特殊方法(与方法为并列状态),当程序用类传概念对象的时候需使用它的构造方法。类中构造方法的名字必须是与它所在的类的名字完全相同,而且没有类型。
4.2 构造器的作用:
4.2.1创建对象
4.2.2初始化对象的属性
4.3 说明:
4.3.1如果没有显式的默认构造器,则系统默认提供一个空参的构造器
4.3.2定义构造器的格式: 权限修饰符 类名(形参列表){ }
4.3.3一个类中定义多个构造器,彼此构成重载。
4.3.4在没有定义构造器时,系统会默认提供一个空参构造器。但是一旦我们显式的定义了类的构造器之后,系统就不再提供空参构造器。
4.3.5总之,一个类中至少会有一个构造器
四、对象
在面向对象语言中,用类声明的变量被称为对象。
1、对象的声明格式:
类的名字 对象名字;
2、对象的使用方法:
“对象.属性”“对象.方法”
> 使用new运算符和类的构造方法为声明的对象分配变量,即创建对象(如果类中没有构造方法,系统会调用默认的构造方法)
>如果创建了一个类的多个对象,则每个对象都独立拥有一套属性(非static)
>若将一个对象p1赋值给另外一个对象p2,即将该p1地址赋值给p2,导致p1与p2指向堆空间中同一个对象
3、对象的内存解析
3.1 内存解析的说明:
> 引用类型的变量只能储存两类值:null或地址值(含变量的类型)
> 一个类声明的两个对象如果具有相同的引用,二者就具有完全相同的变量。
4、匿名对象的使用
4.1 理解:
创建的对象没有显示的赋给变量名,即为匿名对象
4.2 匿名对象只能调用一次
4.3 使用:
如在一个方法中需要将一个参数作为对象,则此时可以直接在括号里new一个对象。