一、对象是对问题领域中事物的抽象,对象具有以下特性:<o:p></o:p>
1. 万事皆为对象。问题领域中的实体和概念都可以抽象为对象。例如:在学校领域,对象包括学生、成绩单、教师、课程,教室等。在太阳系领域,对象包括太阳、月亮、地球、火星和木星等。在用java语言创建的图形用户界面中,窗口、滚动面板、按钮、列表、菜单和文本框等也都是对象。<o:p></o:p>
2. 每个对象都是唯一的。对象的唯一性来自于真实世界中事物的唯一性。世上不存在两片一模一样的叶子。例如:学校领域的学生小张,学生小王,这些都是唯一的对象。在java虚拟机提供的运行时环境中,保证每个对象的唯一性的手段是为它在内存中分配唯一的地址。<o:p></o:p>
3. 对象具有属性和行为。例如:一部手机:牌子是摩托罗拉,价格是2000元,黑色,能够拍照,打电话和收短信等。这部手机的属性包括品牌类型(type),价格(price)和颜色(color),行为包括拍照(takePhoto()),打电话(call()),收短信(receiveMessage())和发短信(sendMessage())。对象的行为包括具有的功能及具体的实现。<o:p></o:p>
4. 对象具有状态。状态是指某个瞬间对象的各个属性的取值。<o:p></o:p>
5. 对象都属于某个类。每个对象都是某个类的实例。如:中国和美国都属于国家类,中文和英文都属于语言类。类是具有属性和行为的对象的集合。<o:p></o:p>
同一个类的所有实例具有相同属性,但是属性的取值不一定相同。<o:p></o:p>
二、类是一组具有相同属性和行为的对象的抽象。即是同类型对象的定义书,规范。<o:p></o:p>
三、使用class定义类<o:p></o:p>
在面向对象设计中,对象并不会凭空产生,你必须识别出问题中的对象,在java中,用“类”来定义出对象的规范,再根据类来构建出一个个的对象,然后通过对象所提供的方法来与程序互动。<o:p></o:p>
<o:p> </o:p>
四、对象提供的服务是由对象的方法来实现的,因此发送消息实际上就是调用一个对象的方法。<o:p></o:p>
五、封装:对于OOP(面向对象编程)而言就是将属性和方法一起包装到一个程序单元中,并隐藏方法的实现过程。<o:p></o:p>
六、抽象:是指从特定角度出发,从已经存在的一些事物中抽取我们所关注的特性,形成一个新的事物的过程。<o:p></o:p>
抽象是一种由具体到抽象、由复杂到简洁的思维方式。在面向对象的开发过程中,抽象体现在以下几个方面:<o:p></o:p>
1. 从问题领域的事物到软件模型中对象的抽象。<o:p></o:p>
2. 从对象到类的抽象。<o:p></o:p>
3. 从子类到父类的抽象。如下图:<o:p></o:p>
<v:shapetype o:spt="75" coordsize="21600,21600" filled="f" stroked="f" id="_x0000_t75" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:extrusionok="f" o:connecttype="rect" gradientshapeok="t"></v:path><o:lock v:ext="edit" aspectratio="t"></o:lock></v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" o:ole="" style="WIDTH: 254.25pt; HEIGHT: 327.75pt"><v:imagedata src="file:///C:\DOCUME~1\qiujy\LOCALS~1\Temp\msohtml1\01\clip_image001.emz" o:title=""></v:imagedata></v:shape><o:p></o:p>
七、封装一个类,就是根据具体的应用从同一类型对象中抽象出相关的属性和方法:<o:p></o:p>
1.定义类的语法:<o:p></o:p>
[访问修饰符] class 类名 {<o:p></o:p>
//这里放属性和方法的声明。 <o:p></o:p>
}<o:p></o:p>
2.声明属性的语法:<o:p></o:p>
[访问修饰符] 数据类型 属性名[=初始值];<o:p></o:p>
3.定义方法的语法:<o:p></o:p>
[访问修饰符] 返回值类型 方法名(参数类型 参数名1,…){<o:p></o:p>
//这里放方法的具体实现语句 <o:p></o:p>
}<o:p></o:p>
例:<o:p></o:p>
public class CellPhone {<o:p></o:p> <o:p> </o:p> private String type;<o:p></o:p> private String color;<o:p></o:p> private double price;<o:p></o:p> <o:p> </o:p> public void takePhoto(){<o:p></o:p> ...<o:p></o:p> }<o:p></o:p> public void call(){<o:p></o:p> ...<o:p></o:p> }<o:p></o:p> public void sendMessage(){<o:p></o:p> ...<o:p></o:p> }<o:p></o:p> public void receiveMessage(){<o:p></o:p> ...<o:p></o:p> }<o:p></o:p> <o:p> </o:p> }<o:p></o:p> |
八、构造方法<o:p></o:p>
1.怎么根据设计好的类来创建一个对象?<o:p></o:p>
利用new关键词调用类的构造方法(类的一种特殊方法)就可创建该类的一个对象。 <o:p></o:p>
2.构造方法的名字和类名相同,并且没有返回值。<o:p></o:p>
3.构造方法的作用在于构造并初始化对象。<o:p></o:p>
4.两种构造方法<o:p></o:p>
(1).参数化构造方法:<o:p></o:p>
访问修饰符 类名(参数类型 参数名,…){<o:p></o:p>
...<o:p></o:p>
}<o:p></o:p>
如上例可写:<o:p></o:p>
public CellPhone(String t, String c, double p){<o:p></o:p> type = t;<o:p></o:p> color = c;<o:p></o:p> price = p;<o:p></o:p> }<o:p></o:p> |
<o:p> </o:p>
(2).默认(隐式)构造方法:即无参数的构造方法。<o:p></o:p>
Public CellPhone(){<o:p></o:p> ……<o:p></o:p> }<o:p></o:p> |
<o:p> </o:p>
5.注意:如果类中有一个自己编写的构造方法时,编译器就不会为我们再提供那个默认构造方法。此时又希望使用你的类的用户还可以用默认构造方法来创建类的实例时,那你就必须在类中添加一个默认构造方法。<o:p></o:p>
九、关于源文件:一个源文件中可以定义多个类,但只能有一个公有类,且文件名必须跟公有类的类名相同。<o:p></o:p>
十、this关键词<o:p></o:p>
1.每个类的每个非静态方法(没有被static修饰)都会隐含一个this引用名称,它指向调用这个方法的对象。<o:p></o:p>
2.当在方法中使用本类的属性时,都会隐含地使用this名称,当然也可以明确指定。<o:p></o:p>
3.this用法一:当类中某个非静态方法的参数名(或局部变量名)跟类的某个属性(成员变量)名相同时,为了避免参数的作用范围覆盖了类属性的作用范围,必须明确地使用this名称来指定。如:<o:p></o:p>
public CellPhone(String type, String color, double price){<o:p></o:p> this.type = type;<o:p></o:p> this.color = color;<o:p></o:p> this.price = price;<o:p></o:p> }<o:p></o:p> |
<o:p> </o:p>
5.this用法二:如果某个构造方法的第一条语句具有形式this(...),那么这个构造方法将调用同一类中的其他构造方法。<o:p></o:p>
十一、理解调用一个构造方法创建一个对象的执行过程:<o:p></o:p>
1.初始化所有属性为默认值(0,0.0,false或null)。<o:p></o:p>
2.按照在类声明中出现的次序依次执行所有属性的初始化语句和初始化块。<o:p></o:p>
3.如果构造方法的第一行代码调用了另一个构造方法,则执行被调用的构造方法主体。<o:p></o:p>
4.执行本构造方法的主体。<o:p></o:p>
十二、包:为了便于管理大型软件系统中数目众多的类,解决类命名冲突的问题,Java引入了包(package)。<o:p></o:p>
1.在使用许多类时,类和方法的名称很难决定。有时需要使用与其他类相同的名称。包基本上隐藏了类并避免了名称上的冲突。<o:p></o:p>
2.用package来声明包,package语句必须是文件中的第一条语句。<o:p></o:p>
3.包对应着文件系统的目录层次结构。<o:p></o:p>
4.在package语句中,用“.”来指明包(目录)的层次。
5.在当前目录下生成包<o:p></o:p>
javac -d . CellPhone.java<o:p></o:p>
在指定目录下生成包<o:p></o:p>
javac -d E:\JavaLesson CellPhone.java<o:p></o:p>
6.运行时:<o:p></o:p>
java 包名.类名<o:p></o:p>
7.用import来导入你想用的包中的类。<o:p></o:p>
<o:p> </o:p>
十三、继承:是复用代码的有力手段,当多个类之间存在相同的属性和方法时,可从这些类中抽象出父类(超类)。在父类中定义这些相同的属性和方法,所有子类无须重新定义这些属性和方法,而只要通过extends语句来声明继承父类。这样子类就自动拥有在父类中定义的属性和方法了。<o:p></o:p>
1.继承的优点<o:p></o:p>
(1).代码的可重用性<o:p></o:p>
(2).超类的属性和方法可用于子类<o:p></o:p>
(3).设计应用程序变得更加简单<o:p></o:p>
(4).可以轻松地自定义子类<o:p></o:p>