Java实验二

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

实验二:Java语言面向对象编程技术(2学时)预备知识什么是类?一个类的定义把它很生硬描述为“方法和数据的集合”。它把面向对象编程出来之前的编程思想结合起来,这对理解该概念很有帮助。在类和面向对象程序设计前的主要概念是结构化程序设计。结构化程序设计的理念是程序员将复杂问题划分为小块的代码,一般称为函数或子程序。这符合“做一件很大很复杂的事情的好办法是把它分成一系列比较小但更容易管理的问题”的理念。尽管结构化程序设计在管理复杂性方面很有用,但它不能容易的解决代码重用问题。程序员发现他们总是“重复发明”轮子。在试着对现实物理对象的思考中,程序设计方面的思想家找到了面向对象的理念(有时被称为OO)。比较C++和Java的类因为Java被设计成容易让C++程序员学习的语言,因此两种语言在处理类上有很多相似的地方。C++和Java都有继承,多态和数据隐藏特性,并使用显式的修饰词。有一些不同也是因为使Java更容易学习和使用。C++语言实现了多态继承,这样,一个类就可以比一个的父类(或基类)更强大。Java只允许单继承,这样就只有一个父类。为了克服这个限制,Java有一个被称作接口的特性。Java语言的设计者确定接口能够提供多态继承的好处而没有坏处。所有Java类都是Object类的后代。Java中类的角色类是Java的心脏,所有的Java代码都在一个类里。Java里没有自由独立代码的概念,甚至最简单的HelloWorld应用都是包含在类里被创建的。为了指出一个类是另一个类的派生类,我们使用extend关键字。如果extend关键字没有被使用,这个类将是从基类Object派生的。这可以使它有一些基本的功能,比如打印自己的名字和其他一些在线程中可能需要用到的功能。类和对象类是用来创建对象的模板,是一组相似的对象实体共性的抽象。类中包含两大成员,其一是数据成员(Field),也称为类的属性,不同的属性值使得同一个类的对象相互区别;其二是代码成员,也称为类的方法,方法是在类中用来完成某个任务的一组相关的代码。对象是类的实例化,或者说具体化,它是一种动态的概念,而类本身是一个静态的概念。类变量、实例变量类变量是有static修饰的变量,也称为静态变量,这种变量定义的是整个类的公用属性,该类的所有对象共享这个变量,而实例变量定义了某个特定对象的属性,实例变量在类的每个对象中都有一份自己的备份。对某个对象实例变量的修改不好影响到该类的其他对象,而对类变量的修改却会影响到同类的所有对象。类变量常用来作为类的不同对象间交流和共享数据的工具。类方法、实例方法类方法是一个静态的概念,它的调用不由得要与某个实例对象相关联,而实例方法则是一个动态的概念,它的调用必须与某个实例对象相关联。类方法中不能使用实例变量,而实例方法则可以使用类变量,也可以使用实例变量。注意:即使没有实例化类的任何对象,只要该类在执行时被加载到内存中(import),该类的类变量和类方法就存在,并且可以通过类名来使用它们。(例如:类变量staticdoublePI-double值比任何其他值更接近圆的周长与直径之比pi。;类方法staticdoubleabs(doublea)-返回double值的绝对值。)局部变量局部变量是方法变量。它们在方法代码开始运行时生效,并在方法结束时失效。因为它们只能在方法内可见,因此临时操作数据时比较有用。如果你希望一个值在方法被调用时保持,你需要将变量创建在类级别。一个自动变量将“屏蔽”类级别的变量。因此,下面的代码将打印99而不是10对象的创建、构造函数、new运算符创建一个对象,就是创建一个类的实例。对象在创建的过程中会自动调用构造函数,构造函数的主要作用就是初始化对象的实例变量,构造函数必须以类的名字来命名,同事,不能为构造函数指定返回类型。创建对象需要采用new运算符。执行new运算将完成以下几项工作:(1)为对象动态地分配内存空间;(2)调用对象的构造函数以初始化对象;(3)以句柄的形式返回该对象的内存地址;(4)将该句柄存储在对象变量中。修饰语和封装修饰符的可见性是Java封装机制的一部分。封装允许分离方法执行的接口。修饰符的可见性是Java封装机制至关重要的部分。封装允许分离方法执行的接口。带来的好处就是类内部的代码的细节可以被改变,同时不影响其他对象的使用。这是面向对象设计的一个关键概念。publicclassShad{publicintiShad=10;publicstaticvoidmain(Stringargv[]){Shads=newShad();s.amethod();}//Endofmainpublicvoidamethod(){intiShad=99;System.out.println(iShad);//可以使用this关键字访问类的实例变量}//Endofamethod}修饰符包括:private、public、protected、package、static、abstract、final、synchronized等。函数重载(MethodOverloading)函数重载是指在同一个类中可以创建两个或是多个同名的方法,这些同名方法的参数个数和类型不能完全相同,系统能够自动根据调用实参的类型来决定使用哪一个方法。注意:在区别重载方法时,Java不好考虑方法的返回值类型,如果两个同名方法有着完全相同的参数个数、类型和顺序,而仅仅是返回值类型不同,那么这不是函数重载。子类的构造函数和关键字super子类可以继承超类的所有非私有成员,然而构造函数却不能被继承,因此,子类要有自己的构造函数,子类的构造函数分为两部分,一部分用于构造超类的成员,另一部分用于构造子类自己的成员。对超类部分的构造要使用Java的super关键字。方法覆盖(MethodOverriding)子类可以对超类的同名方法进行重写,从而覆盖掉超类中的同名方法。注意此时子类的方法必须与其所覆盖的超类方法具有完全相同的名字、参数和返回类型。当在子类中调用一个覆盖的方法时,总是调用子类自己定义的那个方法,而超类定义的那个方法将被隐蔽。如果此时要在子类中调用被覆盖的超类的方法时,就要使用super关键字。抽象类和抽象方法包含有抽象方法的类叫做抽象类,抽象类只定义它的所有子类共享的通用格式,至于实现的细节,则由它的具体子类来完成。抽象类在声明时需要以abstract加以修饰。抽象方法也是用abstract加以修饰,抽象方法定义时在其方法头后面只有一个分号,而没有定义方法体。超类的抽象方法是由子类在继承的时候来实现的,当一个子类继承一个抽象类时,它必须实现超类中的所有的抽象方法,否则这个子类也必须被标识为abstract类型。因为在一个类中,只要有一个抽象方法存在,该类就必须声明为abstract类。注意:抽象类是不能实例化的,如果用new去创建一个抽象类的对象,会产生编译错误。另外,包含抽象方法的类必须声明为抽象类,然而一个不包括任何抽象方法的类,也是可以声明为抽象类的。多态性与动态绑定多态性是指具有同样的方法接口,却有不同的实现。在Java中超类往往定义出一个通用的方法,而其不同的实现则由它的不同的子类来完成。当通过对象来调用这样一个方法时,Java会一句运行时该对象的实际类型来决定用方法的哪一个版本来执行,也即动态地绑定一个方法来执行。而动态绑定的前提是Java允许将子类对象赋给超类类型的变量,每个子类对象同时也是其超类的对象。利用多态性,可以将一个方法的形参设为超类类型,而将传递给该方法的实参既可以是超类对象也可以是子类对象。具体执行时,Java会自动根据实际对象所属的类型来选择方法执行,因此多态性增强了编程的灵活性和系统的维护性和可扩展性。内部类、嵌套类、局部类、匿名类Java允许在一个类中定义另一个类,既类的嵌套定义。通常在一个类里面定义的类叫做嵌套类,而直接包围它的类叫做外部类。嵌套类由两种类型,可以用static修饰符来修饰,即static嵌套类和非static嵌套类,非static嵌套类通常也叫做内部类(innerclass)。1.static嵌套类static嵌套类可以直接访问外部类中的所有static成员,甚至包括private成员。但它不能直接访问外部类的实例成员。可以直接通过外部类名来访问该嵌套类。外部类的方法不能直接使用该嵌套类中的成员。static嵌套类可以被声明为public、private、默认、protected,与类的其他成员一样,static嵌套类遵循这响应的访问控制规则。2.内部类内部类是非static的嵌套类。内部类能够直接访问外部类中的所有成员(实例和静态)。不过,内部类中不能定义任何静态成员;可以通过外部类的对象来访问内部类。外部类的方法中不能直接使用内部类的成员。在内部类中可以使用this关键字,来引用当前的内部类对象,内部类可以声明为Public、Private、默认、Protected,并且遵循着和类的其他成员一样的访问控制规则。注意:由于static嵌套类只能直接访问其外部类中的static成员,而内部类则可以直接访问其外部类中的所有成员(static和非static),因而一般很少使用static嵌套类而是使用内部类。3.局部类局部类也是嵌套类,但它不是作为类的成员来定义的,而是在类的某个代码块内部来定义,比如在类的一个成员方法中定义。局部类的概念有点像局部变量,因此,局部类只在它所定义的代码块中才是可见的,外部类无法感知它的存在。局部类可以访问其外部类的所有成员,然而除final局部变量外,它不能访问声明它的代码块中的其他局部变量。4.匿名内部类匿名内部类是一种特殊形式的局部类,它没有类名只有类体。匿名内部类常常用于GUI事件处理,以响应某个控件的事件。在使用匿名内部类时必须使用它的一个实例,在使用匿名内部类时还有一些限制:·匿名内部类不能有构造函数。·匿名内部类在实现某个接口时,必须实现该接口的所有方法。·匿名类中不能有任何静态成员。实验1对象的创建和使用实验目的:(1)理解类的定义;(2)掌握对象的声明;(3)学会使用构造函数初始化对象;(4)使用类的数据和方法。实验任务:编写一个圆环类Ring的Java程序。圆环类有3个数据成员,分别是内半径innerRadius,外半径outerRadius和颜色color,这些属性可以查看get也可以重新设置set,另外,圆环还可以返回其面积area。程序运行时效果如图所示。实验步骤:(1)仔细阅读程序,完成代码n//Ring.javapublicclassRing{privatedoubleinnerRadius;privatedoubleouterRadius;publicStringcolor;publicRing(doubleiRadius,doubleoRadius,Stringc){innerRadius=iRadius;;//代码1//初始化外半径color=c;}publicdoublegetInnerRadius(){;//代码2//返回内半径}publicdoublegetOuterRadius(){returnouterRadius;}publicvoidsetInnerRadius(doubleiRadius){innerRadius=iRadius;}publicvoidsetouterRadius(doubleoRadius){outerRadius=oRadius;}publicvoidsetColor(Stringc){;//代码3//设置颜色}publicdoublegetArea(){return(outerRadius*outerRadius-innerRadius*innerRadius)*3.1415;}publicstaticvoidmain(String[]args){Ringring=newRing(5,8,red);System.out.println(圆环的内半径:+ring.getInnerRadius()

1 / 22
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功