第3章Java(一)串讲笔记……(3) 第3章面向对象编程基础1、面向对象的基本概念(1)抽象:抽象(Abstraction)是程序设计中最经常使用的技术之一,因为抽象是有效控制程序复杂性的重要手段。
程序设计中利用抽象,在面向过程阶段,系统按函数和模块进行设计。
在面向对象阶段,利用抽象按类设计。
类是目前支持抽象的最好工具。
(2)对象:在面向对象语言中,对象的名称用于程序引用对象,对象的成员变量,用于存储对象的状态信息,对象的方法用于描述对象的行为。
(3)消息:在程序系统中,对象之间的交互通过相互发送消息(Message)实现。
(4)类:把同一类对象的所有共同的属性和行为放在一起描述。
这种声明对象共有属性和行为的机制称为类。
类的声明定义了类的所有对象的共有属性和方法。
类是对一组相同对象的描述,类概括了同类对象的共有性质:数据和方法。
类的每个对象都有自己的标识,但都具有相同的一组属性和提供相同的一组方法。
(1)继承:继承(Inheritance)就是在已有类的基础上,扩充属性,或扩充与改写其某些方法,生成新的类,这个方式称为继承。
继承定义的类称为子类,被继承的类称为超类(父类),子类自动含有父类具有的属性和方法。
继承具有传递性。
继承的最大好处是对象能按层次划分,并在子类中,与父类相同的属性和方法可以不再重复声明。
(2)多态性多态性(Polymorphism)有多种表现形式,这里所说的多态性是指类型适应性多态性,这来自继承,不同继承层次的对象同样的方法有不同的实现。
类型适应性多态要求能自动按对象的实际类型正确调用它的方法。
类型适应性的多态性需要采用动态联编(DynamicBinding)技术实现。
联编是将发送给对象的消息与含执行该消息方法的对象连接起来。
当联编在编译和连接阶段实现时,这样的联编过程称为静态联编;当联编推迟至运行时间实现时,该联编过程称为动态联编。
动态联编是面向对象语言必须具有的一种能力,是实现上述多态性的技术基础。
2、Java的类和对象(1)类:类是一种类型,类封装对象的属性和方法,是同一类对象的模板。
Java程序的主要部分是描述类。
类的声明class 类名//声明新类的基本格式{类体}(2)成员变量成员变量定义的一般形式为:[修饰字]类型变量名;其中,修饰字可以空缺,修饰字用于对成员变量限制其访问权限:private、proected、public和友好的。
成员变量对类内定义的方法都有效。
类的方法也可定义变量,这种变量称为局部变量,局部变量只在定义它的方法中有效。
(3)方法方法给出对象的行为,方法声明的一般形式如下:返回值类型方法名(类型参数名,...,类型参数名){方法体}如果方法无返回值,就用void关键字。
如果某方法中的参数名或局部变量名与类的成员变量名相同,则成员变量在这个方法内暂时被隐藏。
如果成员变量在方法内被隐藏,又在方法中要引用成员变量,必须使用this,this表示调用该方法的当前对象。
在Java程序中,类的方法可以重载。
方法重载是指在一个类中定义多个有相同名字的方法,但这些方法或者参数个数不同或者按顺序参数的类型不同。
(4)构造方法构造方法是一种特殊的方法,这种方法的名与它的类名相同,并且不返回结果,也不写上void关键字。
构造方法的作用..是创建类的对象,并给对象初始化。
程序运行时,当有对象要创建时,由系统自动调用构造方法。
如果类的声明没有定义构造方法,系统就增补一个没有参数的默认构造方法。
(5)对象类被声明后,就可用类创建对象,被创建的对象称为类的实例。
程序使用对象需依次经历4个步骤:声明对象、创建对象、使用对象和撤销对象。
✧声明对象由于类是一种引用类型,声明对象只是命名一个变量,这个变量能引用类的对象。
由于对象还没有创建,所以也暂不要为对象分配内存。
✧创建对象创建对象就是为对象分配内存,为对象分配内存也称类的实例化。
一般形式为:new 构造方法([参数表])●对象创建的两个步骤也可一起完成,一般格式为:类名对象名=new构造方法([参数表])✧对象的内存模型●Java语言将类型分成基本类型和引用类型两种。
在Java语言中,数组类型和类类型是引用类型。
程序访问引用类型的变量采用间接访问方式。
✧使用对象程序使用对象有多种情况:或为对象设置状态、或获取对象的状态、或改变对象的状态、或应用对象的某种方法。
前三种需要访问对象的成员变量,最后一种要调用对象的方法。
程序通过操作符“.”对某对象的成员变量进行访问和方法调用。
一般形式为:对象名.成员变量对象名.方法([参数表])3、实例变量和类变量(1)类的成员变量又分为实例变量和类变量。
在定义成员变量时,用关键字static修饰的是类变量,定义时未用static修饰的是实例变量。
类变量是类的所有对象共享的成员变量.........,一个类变量在类中只有一个,它属于整个类,而不属于类的某个对象。
类变量的内存只有一处,让类的所有对象共享。
从类的任一对象改变类变量,类的其他对象都能发现这个改变。
引用类变量途径有两条——通过类或对象,格式如下:类名.类变量名或对象名.类变量名不同对象的实例变量将被分配不同的内存空间。
4、实例方法和类方法类的方法也有两种:实例方法和类方法。
在方法定义时,冠以修饰字static的方法称为类方法,没有冠以static修饰字的方法是实例方法。
类中的实例方法可以互相调用,并可调用类方法。
类方法也能相互调用。
但不能直接调用实例方法,除非通过局部对象调用实例方法。
另外,类方法能直接引用类变量,不能引用实例变量。
实例方法可引用实例变量,也可引用类变量。
实例方法必须通过对象调用,不能通过类名调用。
类方法只能访问类变量,不能够访问实例变量。
类方法除了可以通过实例对象调用之外,还可以通过类名调用。
5、访问权限访问权限实现访问控制。
Java提供以下4种访问权限:●public:设置没有限制的访问权限,其他类的方法都能访问。
●private:设置最强的访问权限,其他类的方法都不能访问。
●proected:只限子类或者同一包中的类的方法能访问。
●<default>:(无修饰,友好的)只允许同一包中的类的方法访问。
没有修饰的成员变量和方法称为友好变量和友好方法。
6、继承继承是面向对象语言的重要机制。
Java语言不支持多重继承,限定一个类只能有一个超类。
在子类声明中加入extends子句来指定超类。
类声明时,缺省的超类是系统声明的类ng.Object。
子类对父类的继承性,Java语言作以下规定:●子类继承其父类中不是private的成员变量作为自己的成员变量、不是private的方法作为自己的方法。
●超类方法在子类中隐藏称为重写,或置换。
当子类中定义的成员变量和超类中的成员变量同名时,超类的成员变量同样会在子类中被隐藏。
多态性●面向对象语言规定,子类对象也是超类对象,凡超类对象可以应用的地方,子类对象也适用。
●编译时暂不绑定调用哪个方法,必须在运行时才绑定调用方法的技术称为动态联编。
●重载能由调用时提供的参数个数和参数的类型顺序,在编译时就能确定被调用的方法,这种多态性不需要动态联编技术的支持。
多层继承继承声明的新类,又可被其他类再继承,从而构成多层继承。
多层继承中构造方法的调用顺序构造方法的调用顺序与类的继承顺序一致,从最高层次的超类开始,按继承顺序调用各类的构造方法。
如果子类的构造方法要调用超类的构造方法,给从超类继承的成员变量初始化,用代码super(参数);7、Java面向对象的其他机制final类、final方法和final变量final的意义是最终的,用于修饰类、方法和变量,其意思是“不能改变”。
●final类是不能被再继承的类。
final修饰的方法不能被子类的方法覆盖。
final修饰的变量,值不能被改变。
final局部变量在定义时可以暂不设定初值,但是一经初始化,以后就不能再改变。
abstract类和abstract方法●abstract类称为抽象类。
抽象类只声明一种模板,没有具体实现代码的类。
只有它的子类才可能是有实际意义的类。
所以,抽象类不可能有实例。
●abstract方法称为抽象方法。
抽象方法只能出现在抽象类,抽象方法没有实现的代码。
如果一个类是抽象类的子类,则必须具体实现超类的抽象方法。
抽象类可以没有抽象方法但有抽象方法的类一定是抽象类。
关键字super使用super有3种情况:使用super调用超类的构造方法,使用super调用超类被子类覆盖的方法;使用super 访问超类被子类隐藏的成员变量。
关键字this关键字this用来指对象自己。
this的作用有多种,例如,将对象自己作为参数,调用别的方法;当方法的局部变量隐藏成员变量时,利用this引用成员变量;构成函数内调用另一构造函数等。
类之间的is-a和has-a关系类A继承类B,则子类A和超类B之间是is-a关系。
如果类A的某个成员变量的类型是B,则类A和类B之间是has-a关系,类A中成员变量b的类型是B。
内部类(innerclass)Java语言也允许在类声明内部嵌套类声明。
嵌套的类可以是静态的或者是非静态的。
静态类不能直接引用其包含类的成员,必须实例化,所以不经常使用。
非静态的嵌套类,需要进行事件处理,非常流行。
8、接口J ava程序中的类只能继承一个类,这种继承称为单继承。
Java语言虽不允许一个类继承多个类,但允许一个类实现多个接口。
接口是一种只由常量定义和抽象方法组成的特殊类。
用public修饰的接口是公共接口,可被所有的类和接口使用;而没有public修饰的接口只能被同一个包中的其他类和接口使用。
接口的所有变量都默认为是final static属性;所有的方法都默认为是public abstract属性。
一个类通过使用关键字implements声明自己使用一个或多个接口。
实现多个接口时,接口名之间用逗号隔开。
如果一个类要实现某个接口,那么这个类必须实现该接口的所有方法,为这些方法提供实现的方法体。
在实现接口的方法时,方法的名字、返回值类型、参数个数及类型必须与接口中定义的方法完全一致,并一定要用public修饰。
9、基本类public基本类(基本类型v)也可以由基本类对象得到基本类型值。
实现方法如以下例子所示:设有Double类对象dObj,Boolean类对象bObj,代码:Doubled=dObj.DoubleValue();10、Java小应用程序基础Java小应用程序即Java Applet,是嵌入在Web页上供浏览器运行的程序,可放在服务器上供客户端下载使用。
主要功能是显示图形、动画、播放声音、响应用户事件等。
每个小应用程序都得继承Java.applet.Applet类。