类包和接口教学课件

上传人:沈*** 文档编号:241719035 上传时间:2024-07-18 格式:PPT 页数:60 大小:238KB
返回 下载 相关 举报
类包和接口教学课件_第1页
第1页 / 共60页
类包和接口教学课件_第2页
第2页 / 共60页
类包和接口教学课件_第3页
第3页 / 共60页
点击查看更多>>
资源描述
Java第第4章章 类、包和接口类、包和接口2020/12/111第4章 类、包和接口n本章介绍本章介绍Java中面向对象的程序设计的基本方法,中面向对象的程序设计的基本方法,包括类的定义、类的继承、包、访问控制、修饰包括类的定义、类的继承、包、访问控制、修饰符、接口等方面的内容。符、接口等方面的内容。2020/12/1124.1 类、域、方法2020/12/113第4章 类、包和接口类类n类是组成类是组成Java程序的基本要素。它封装了一类对程序的基本要素。它封装了一类对象的状态和方法,是这一类对象的原型象的状态和方法,是这一类对象的原型。n在前几章的例子中,我们已经定义了一些简单的在前几章的例子中,我们已经定义了一些简单的类,如类,如HelloworldApp类。类。2020/12/114第4章 类、包和接口4.1.1 域和方法域和方法nclass Person nString name;nint age;nvoid sayHello()n System.out.println(Hello!My name is+name);nnn域对应类的静态属性。域又称为域变量、属性、成员变量等 n方法是类的动态属性,标志了类所具有的功能和操作,Java的方法与其他语言中的函数或过程类似 2020/12/115第4章 类、包和接口4.1.2 构造方法构造方法n构造方法是一种特殊的方法。构造方法是一种特殊的方法。Java中的每个类都中的每个类都有构造方法,用来初始化该类的一个新的对象。有构造方法,用来初始化该类的一个新的对象。n构造方法具有和类名相同的名称,而且不返回任构造方法具有和类名相同的名称,而且不返回任何数据类型。何数据类型。nPerson(String n,int a)nname=n;nage=a;n2020/12/116第4章 类、包和接口默认构造方法n一般情况下,类都有一个至多个构造方法,如果在定义类对象时没有定义任何构造方法,系统会自动产生一个构造方法,称为默认构造方法(default constructor)。n默认构造方法不带参数,并且方法体为空。2020/12/117第4章 类、包和接口4.1.3 使用对象n要访问或调用一个对象的域或方法,需要用算符“”连接对象及其域或方法。如:nSystem.out.println(p.name);np.sayHello();n由于只能通过对象变量来访问这个对象的域或方法,不通过引用变量就无法访问其中的域或方法。对于访问者而言,这个对象是封装成一个整体的,这正体现了面向对象的程序设计的“封装性”。2020/12/118第4章 类、包和接口4.1.4 方法重载方法重载n通过方法重写可以实现多态。方法重载即指多个通过方法重写可以实现多态。方法重载即指多个方法可以享有相同的名字。但是这些方法的参数方法可以享有相同的名字。但是这些方法的参数必须不同,或者是参数个数不同,或者是参数类必须不同,或者是参数个数不同,或者是参数类型不同,下例中我们通过方法重写分别接收一个型不同,下例中我们通过方法重写分别接收一个或几个不同数据类型的数据。或几个不同数据类型的数据。nMethodOverloadingTest.java2020/12/119第4章 类、包和接口n编译器根据参数的个数和类型来决定当前所使用编译器根据参数的个数和类型来决定当前所使用的方法。的方法。n如果两个方法的声明中,参数的类型和个数均相如果两个方法的声明中,参数的类型和个数均相同,只是返回类型不同,则编译时会产生错误,同,只是返回类型不同,则编译时会产生错误,即返回类型不能用来区分重写的方法。即返回类型不能用来区分重写的方法。n而且重写的多个方法必须返回相同的数据类型。而且重写的多个方法必须返回相同的数据类型。2020/12/1110第4章 类、包和接口n运行结果为:运行结果为:nC:java MethodOverloadingTestnReceive one int data ni=1nReceive two int datas nx=2 y=3nReceive one double data nd=12.56nReceive a string ns=very interesting,isnt it?2020/12/1111第4章 类、包和接口4.1.5 this的使用n 1在方法及构造方法中,使用this来访问域及方法n例如,方法sayHello中使用name和使用this.name是相同的。即:nvoid sayHello()nSystem.out.println(Hello!My name is +name);nn与nvoid sayHello()nSystem.out.println(Hello!My name is +this.name);nn的含义是相同的。2020/12/1112第4章 类、包和接口n2使用this解决局部变量与域同名的问题n使用this还可以解决局部变量(方法中的变量)或参数变量与域变量同名的问题。如,在构造方法中,经常这样用:nPerson(int age,String name)nnthis.age=age;nthis.name=name;nn这里,this.age表示域变量,而age表示的是参数变量。2020/12/1113第4章 类、包和接口n3构造方法中,用this调用另一构造方法n构造方法中,还可以用this来调用另一构造方法。如:nPerson()nnthis(0,);nn如果,在构造方法中调用另一构造方法,则这条调用语句必须放在第一句。(关于构造方法的更复杂的问题,将在第5章中进一步讲述。)2020/12/11144.2 类的继承 2020/12/1115第4章 类、包和接口n继承(inheritance)是面向对象的程序设计中最为重要的特征之一。n由继承而得到的类为子类(subclass),被继承的类为父类或超类(superclass),父类包括所有直接或间接被继承的类。n一个类只能有一个直接父类。n子类继承父类的状态和行为,同时也可以修改父类的状态或重载父类的行为,并添加新的状态和行为。n采用继承的机制来组织、设计系统中的类,可以提高程序的抽象程度,使之更接近于人类的思维方式,同时也通过继承能较好地实现代码重用,可以提高程序开发效率,降低维护的工作量。2020/12/1116第4章 类、包和接口4.2.1 派生子类nJava中的继承是通过extends关键字来实现的 nclass SubClass extends SuperClass nnn如果没有extends子句,则该类默认为java.lang.Object的子类。所以,Java中,所有的类都是通过直接或间接地继承java.lang.Object得到的。2020/12/1117第4章 类、包和接口n继承关系在UML图中,是用一个箭头来表示子类与父类的关系的。n类Student从类Person继承,定义如下:nclass Student extends Person n/n2020/12/1118第4章 类、包和接口4.2.2 域的继承与隐藏、添加n1域的继承n子类可以继承父类的所有域nStudent自动具有Person的属性(name,age)n2.域的隐藏n子类重新定义一个与从父类那里继承来的域变量完全相同的变量,称为域的隐藏。域的隐藏在实际编程中用得较少。n3域的添加n在定义子类时,加上新的域变量,就可以使子类比父类多一些属性。如:nclass Student extends PersonnnString school;nint score;n2020/12/1119第4章 类、包和接口4.2.3 方法的继承、覆盖与添加n1方法的继承n父类的非私有方法也可以被子类自动继承。如,Student自动继承Person的方法sayHello和isOlderThan。n2方法的覆盖n正像子类可以定义与父类同名的域,实现对父类域变量的隐藏一样,子类也可以重新 定义与父类同名的方法,实现对父类方法的覆盖(Overriding)。2020/12/1120第4章 类、包和接口nvoid sayHello()nSystem.out.println(Hello!My name is +name+n.My school is +school);nn可见,通过方法的覆盖,能够修改对象的同名方法的具体实现方法。2020/12/1121第4章 类、包和接口3方法的重载n一个类中可以有几个同名的方法,这称为方法的重载(Overloading)。同时,还可以重载父类的同名方法。与方法覆盖不同的是,重载不要求参数类型列表相同。重载的方法实际是新加的方法。n如,在类Student中,重载一个名为sayHello的方法:nvoid sayHello(Student another)nSystem.out.println(Hi!);nif(school=another.school)System.out.println(Shoolmates);n2020/12/1122第4章 类、包和接口4方法的添加n子类可以新加一些方法,以针对子类实现相应的功能。n如,在类Student中,加入一个方法,对分数进行判断:nboolean isGoodStudent()nreturn score=90;n2020/12/1123第4章 类、包和接口4.2.4 super的使用n1使用super访问父类的域和方法n子类自动地继承父类的属性和方法,一般情况下,直接使用父类的属性和方法,也可能以使用this来指明本对象。n 注意:正是由于继承,使用this可以访问父类的域和方法。但有时为了明确地指明父类的域和方法,就要用关键字super。n例如:父类Student有一个域age,在子类Student中用age,this.age,super.age来访问age是完全一样的:nvoid testThisSuper()nint a;na=age;na=this.age;na=super.age;nn当然,使用super不能访问在子类中添加的域和方法。2020/12/1124第4章 类、包和接口n有时需要使用super以区别同名的域与方法。如,使用super可以访问被子类所隐藏了的同名变量。又如,当覆盖父类的同名方法的同时,又要调用父类的方法,就必须使用super。如:nvoid sayHello()nsuper.sayHello();nSystem.out.println(My school is +school);nn从这里可以看出,即使同名,也仍然可以使用父类的域和方法,这也使得在覆盖父类的方法的同时,又利用已定义好的父类的方法。2020/12/1125第4章 类、包和接口2使用父类的构造方法n在严格意义上,构造方法是不能继承的。比如,父类Person有一个构造方法Person(String,int),不能说子类Student也自动有一个构造方法Student(String,int)。但是,这不并意味着子类不能调用父类的构造方法。n子类在构造方法中,可以用super来调用父类的构造方法。nStudent(String name,int age,String school)nsuper(name,age);nthis.school=school;nn使用时,super()必须放在第一句。有关构造方法的更详细的讨论,参见第5章。2020/12/1126第4章 类、包和接口4.2.5 父类对象与子类对象的转换n类似于基本数据类型数据之间的强制类型转换,存在继承关系的父类对象和子类对象之间也可以在一定条件下相互转换。父类对象和子类对象的转化需要遵循如下原则。n(1)子类对象可以被视为其父类的一个对象,如一个Student对象也是一个Person对象。n(2)父类对象不能被当做其某一个子类的对象。n(3)如果一个方法的形式参数定义的是父类对象,那么调用这个方法时,可以使用子类对象作为实际参数。n(4)如果父类对象引用指向的实际是一个子类对象,那么这个父类对象的引用可以用强制类型转换成子类对象的引用。n例:Student.java2020/12/11274.3 包2020/12/1128第4章 类、包和接口nJava提供包(package)来管理类名空间。包实际上提供了一种命名机制和可见性限制机制。n包是一种松散的类的集合,一般不要求处于同一个包中的类有明确的相互关系,如包 含、继承等,但是由于同一包中的类在默认情况下可以互相访问,所以为了方便编程和管 理,通常把需要在一起工作的类放在个包里。2020/12/1129第4章 类、包和接口4.3.1 package语句npackage pkg1.pkg2.pkg3;n包及子包的定义,实际上是为了解决名字空间、名字冲突,它与类的继承没有关系。事实上,一个子类与其父类可以位于不同的包中。nJava的JDK提供的包包括:java.applet,java.awt,java.awt.image,java.awt.peer,java.io,java.lang,java.util,javax.swing,等。n包层次的根目录是由环境变量CLASSPATH来确定的。n在简单情况下,Java源文件默认为package语句,这时称为无名包(unamed package)。无名包不能有子包。2020/12/1130第4章 类、包和接口4.3.2 import语句n为了能使用Java中已提供的类,需要用import语句来引入所需要的类。import语句的格式为:nimport package1.package2.(classname|*);n其中,package1.package2表明包的层次,与package语句相同,它对应于文件目录,classname则指明所要引入的类,如果要从一个包中引入多个类,则可以用星号(*)来代替。例如:nimport java.awt.*;nimport java.util.Date;nJava编译器为所有程序自动引入包java.lang,因此不必用import语句引入它包含的所有的类,但是若需要使用其他包中的类,必须用import语句引入。n 注意:使用星号(*)只能表示本层次的所有类,不包括子层次下的类。n例如,经常需要用两条import语句来引入两个层次的类:nimport java.awt.*;nimport java.awt.event.*;2020/12/1131第4章 类、包和接口4.3.3 编译和运行包中的类n使用javac可以将.class文件放入到相应的目录,只需要使用一个命令选项-d来指明包的根目录即可。njavac -d d:tangch04 d:tangch04pkTestPkg.javanjavac -d .pk*.javan其中,“.”表示当前目录 n运行该程序,需要指明含有main的类名:njava pk.TestPkg2020/12/1132第4章 类、包和接口4.3.4 CLASSPATH在编译和运行程序中,经常要用到多个包,怎样指明这些包的根目录呢?简单地说,包层次的根目录是由环境变量CLASSPATH来确定的。具体操作有两种方法。n一是在java及javac命令行中,用-classpath选项来指明,如:njava classpath d:tangch04;c:javaclasses;.pk.TestPkgn二是设定classpath环境变量,用命令行设定环境变量,如:nSet classpath=d:tangch04;c:javaclasses;.n在Windows中还可以按第2章中的办法设定环境变量。2020/12/11334.4 访问控制符2020/12/1134第4章 类、包和接口4.4.1 成员的访问控制符同一个同一个类中中同一个包中同一个包中不同包中的子不同包中的子类不同包中的非子不同包中的非子类privateYes默认YesYesprotectedYesYesYespublicYesYesYesYes2020/12/1135第4章 类、包和接口4.4.2 类的访问控制符n在定义类时,也可以用访问控制符。类的访问控制符或者为public,或者默认。若使用public,其格式为:npublic class 类名nnn如果类用public修饰,则该类可以被其他类所访问;若类默认访问控制符,则该类只能被同包中的类访问。2020/12/1136第4章 类、包和接口4.4.3 setter与gettern在Java编程中,有一种常见的做法,是将所有的或部分的域用private修饰,从而更好地将信息进行封装和隐藏。在这样的类中,用setXXXX和getXXXX方法对类的属性进行存取,分别称为setter与getter。这种方法有以下优点。n(1)属性用private更好地封装和隐藏,外部类不能随意存取和修改。n(2)提供方法来存取对象的属性,在方法中可以对给定的参数的合法性进行检验。n(3)方法可以用来给出计算后的值。n(4)方法可以完成其他必要的工作(如清理资源、设定状态,等等)。n(5)只提供getXXXX方法,而不提供setXXXX方法,可以保证属性是只读的。n例如:在类Person中将域age以set和get方法提供。2020/12/1137第4章 类、包和接口nclass Person2nnprivate int age;npublic void setAge(int age)nif(age0&age200)this.age=age;nnpublic int getAge()nreturn age;nn2020/12/1138第4章 类、包和接口4.5 非访问控制符非非访问控控制制符符基基 本本 含含 义修修 饰 类修修 饰 成成员修修饰局局部部变量量static静态的、非实例的、类的只可以修饰内部类Yesfinal最终的、不可改变的YesYesYesabstract抽象的、不可实例化的YesYes2020/12/1139第4章 类、包和接口4.5.1 static n静态域最本质的特点是:它们是类的域,不属于任何一个类的具体对象实例。它不保存在某个对象实例的内存区间中,而是保存在类的内存区域的公共存储单元。换句话说,对于该类的任何一个具体对象而言,静态域是一个公共的存储单元,任何一个类的对象访问它,取到的都是相同的数值;同样任何一个类的对象去修改它,也都是在对同一个内存单元进行操作。n类变量可以通过类名直接访问,也可以通过实例对象来访问,两种方法的结果是相同的。如我们用到的JDK中的System类的in和out对象,就是属于类的域,直接用类名来访问,即System.in和System.out。2020/12/1140第4章 类、包和接口n又如,在类Person中可以定义一个类域为totalNum:nclass Person nstatic long totalNum;nint age;nString Name;nntotalNum代表人类的总人数,它与具体对象实例无关。可以有两种方法来访问:Person.totalNum和p.totalNum(假定p是Person对象)。2020/12/1141第4章 类、包和接口2static方法n用static修饰符修饰的方法仅属于类的静态方法,又称为类方法。与此相对,不用static修饰的方法,则为实例方法。类方法的本质是该方法是属于整个类的,不是属于某个实例的。n声明一个方法为static有以下几重含义。n(1)非static的方法是属于某个对象的方法,在这个对象创建时,对象的方法在内存中拥有自己专用的代码段。而static的方法是属于整个类的,它在内存中的代码段将随着类的定义而进行分配和装载,不被任何一个对象专有。n(2)由于static方法是属于整个类的,所以它不能操纵和处理属于某个对象的成员变量,而只能处理属于整个类的成员变量,即static方法只能处理static域或调用static方法。n(3)类方法中,不能访问实例变量。在类方法中不能使用this 或super。n(4)调用这个方法时,应该使用类名直接调用,也可以用某一个具体的对象名。n例如:前面章节用到的方法Math.random(),Integer.parseInt()等就是类方法,直接用类名进行访问。2020/12/1142第4章 类、包和接口4.5.2 finaln1final类n如果一个类被final修饰符所修饰和限定,说明这个类不能被继承,即不可能有子类。n2final方法nfinal修饰符所修饰的方法,是不能被子类所覆盖的方法。2020/12/1143第4章 类、包和接口3final域及final局部变量nfinal域、final局部变量,它们的值一旦给定,就不能更改。大体上说,final域、final局部变量是只读量,它们能且只能被赋值一次,而不能被赋值多次。n一个域被static final两个修饰符所限定时,它实际的含义就是常量,如Integer.MAX_VALUE(表示最大整数)、Math.PI(表示圆周率)就是这种常量。在程序中,通常用static与final一起使用来指定一个常量。n在定义static final域时,若不给定初始值,则按默认值进行初始化(数值为0,boolean型为false,引用型为null)。n在定义final域时,若不是static的域,则必须且只能赋值一次,不能缺省。这种域的赋值的方式有两种:一是在定义变量时赋初始值,二是在每一个构造函数中进行赋值。n在定义final局部变量(方法中的变量)时,也必须且只能赋值一次。它的值可能不是常量,但它的取值在变量存在期间不会改变。2020/12/1144第4章 类、包和接口4.5.3 abstractn1abstract类n凡是用abstract修饰符修饰的类被称为抽象类。n抽象类不能被实例化 n2abstract方法 n被abstract所修饰的方法叫抽象方法,抽象方法的作用在为所有子类定义一个统一的接口。对抽象方法只需声明,而不需实现,即用分号(;)而不是用,格式如下:nabstract returnType abstractMethod(paramlist);n抽象类中可以包含抽象方法,也可以不包含abstract方法。但是,一旦某个类中包含了abstract方法,则这个类必须声明为abstract类。n抽象方法在子类中必须被实现,否则子类仍然是abstract的。2020/12/1145第4章 类、包和接口4.6 接口接口nJava通过接口使得处于不同层次,甚至互不相关的类可以通过接口使得处于不同层次,甚至互不相关的类可以具有相同的行为。具有相同的行为。n接口就是方法定义和常量值的集合。它的用处主要体现在接口就是方法定义和常量值的集合。它的用处主要体现在下面几个方面:下面几个方面:n1.通过接口可以实现不相关类的相同行为,而不需要考虑通过接口可以实现不相关类的相同行为,而不需要考虑这些类之间的层次关系。这些类之间的层次关系。n2.通过接口可以指明多个类需要实现的方法。通过接口可以指明多个类需要实现的方法。n3.通过接口可以了解对象的交互界面,而不需了解对象所通过接口可以了解对象的交互界面,而不需了解对象所对应的类。对应的类。2020/12/1146第4章 类、包和接口n在接口中定义这些类共同的行为,然后由每个类分别实现在接口中定义这些类共同的行为,然后由每个类分别实现这些行为。这些行为。n与与C+不同,不同,Java不支持多重继承,而是用接口实现比不支持多重继承,而是用接口实现比多重继承更强的功能。多重继承更强的功能。n多重继承指一个类可以为多个类的子类,它使得类的层次多重继承指一个类可以为多个类的子类,它使得类的层次关系不清楚,关系不清楚,而且当多个父类同时拥有相同的成员变量而且当多个父类同时拥有相同的成员变量和方法时,子类的行为是不容易确定的,这给编程带来了和方法时,子类的行为是不容易确定的,这给编程带来了困难。困难。n单一继承则清楚地表明了类的层次关系,指明子类和父类单一继承则清楚地表明了类的层次关系,指明子类和父类各自的行为。各自的行为。n接口则把方法的定义和类的层次区分开来,通过它可以在接口则把方法的定义和类的层次区分开来,通过它可以在运行时动态地定位所调用的方法。同时接口中可以实现运行时动态地定位所调用的方法。同时接口中可以实现“多重继承多重继承”,且一个类可以实现多个接口。正是这些机制,且一个类可以实现多个接口。正是这些机制使得接口提供了比多重继承更简单、更灵活、而且更强劲使得接口提供了比多重继承更简单、更灵活、而且更强劲的功能。的功能。2020/12/1147第4章 类、包和接口1.接口的定义接口的定义n接口的定义包括接口声明和接口体两部分。如下:接口的定义包括接口声明和接口体两部分。如下:ninterfaceDeclaration ninterface Bodynnn(1)接口声明:接口声明:nn最简单的接口声明如下:最简单的接口声明如下:ninterface interfaceNamenn2020/12/1148第4章 类、包和接口n通常接口以通常接口以able或或ible结尾,表明接口能完成一定的行为。结尾,表明接口能完成一定的行为。n接口声明中还可以包括对接口的访问权限以及它的父接口列表。完整接口声明中还可以包括对接口的访问权限以及它的父接口列表。完整的接口声明如下:的接口声明如下:npublic interface interfaceName extends listOfSuperInterfacennn其中其中public指明任意类均可以使用这个接口,缺省情况下,只有与该指明任意类均可以使用这个接口,缺省情况下,只有与该接口定义在同一个包中的类才可以访问这个接口。接口定义在同一个包中的类才可以访问这个接口。nextends 子句与类声明中的子句与类声明中的extends子句基本相同,不同的是一个接子句基本相同,不同的是一个接口口可以有多个父接口,用逗号隔开,可以有多个父接口,用逗号隔开,而一个类只能有一个父类。而一个类只能有一个父类。子接子接口继承父接口中所有的常量和方法。口继承父接口中所有的常量和方法。2020/12/1149第4章 类、包和接口(2)接口体接口体n接口体中包含常量定义和方法定义两部分。接口体中包含常量定义和方法定义两部分。n常量定义的格式为:常量定义的格式为:ntype NAME=value;n其中其中type可以是任意类型,可以是任意类型,NAME是常量名,通常用大写,是常量名,通常用大写,value是常量值。在接口中定义的常量可以被实现该接口是常量值。在接口中定义的常量可以被实现该接口的多个类共享,它与的多个类共享,它与 C中用中用#define以及以及C+中用中用const定义的常量是相同的。定义的常量是相同的。n在接口中定义的常量具有在接口中定义的常量具有public,final,static的属性。的属性。2020/12/1150第4章 类、包和接口n方法定义的格式为:方法定义的格式为:nreturnType methodName(paramlist);n接口中只进行方法的声明,而不提供方法的实现,接口中只进行方法的声明,而不提供方法的实现,所以,方法定义没有方法体,且用分号所以,方法定义没有方法体,且用分号(;)结尾。结尾。在接口中声明的方法具有在接口中声明的方法具有public 和和abstract属性。属性。n另外,如果在子接口中定义了和父接口同名的常另外,如果在子接口中定义了和父接口同名的常量或相同的方法,则父接口中的常量被隐藏,方量或相同的方法,则父接口中的常量被隐藏,方法被重载。法被重载。2020/12/1151第4章 类、包和接口n下面我们给出一个接口的定义:下面我们给出一个接口的定义:ninterface Collection nint MAX_NUM=100;nvoid add(Object obj);nvoid delete(Object obj);nObject find(Object obj);nint currentCount();n2020/12/1152第4章 类、包和接口2.接口的实现接口的实现n在类的声明中用在类的声明中用implements子句来表示一个类子句来表示一个类使用某个接口,在类体中可以使用接口中定义的使用某个接口,在类体中可以使用接口中定义的常量,而且必须实现接口中定义的所有方法。一常量,而且必须实现接口中定义的所有方法。一个类可以实现多个接口。个类可以实现多个接口。2020/12/1153第4章 类、包和接口n下面我们在类下面我们在类FIFOQueue中实现上面所定义的接口中实现上面所定义的接口collection:nclass FIFOQueue implements collectionnvoid add(Object obj)nnnvoid delete(Object obj)nnnObject find(Object obj)nnnint currentCountnnn在类中实现接口所定义的方法时,方法的声明必须与接口中所定义的在类中实现接口所定义的方法时,方法的声明必须与接口中所定义的完全一致。完全一致。2020/12/1154第4章 类、包和接口3.接口类型接口类型n接口可以作为一种接口可以作为一种引用类型引用类型来使用。任何实现该接口的类来使用。任何实现该接口的类的实例都可以存储在该接口类型的变量中,通过这些变量的实例都可以存储在该接口类型的变量中,通过这些变量可以访问类所实现的接口中的方法。可以访问类所实现的接口中的方法。Java运行时系统动态运行时系统动态地确定该使用哪个类中的方法。地确定该使用哪个类中的方法。n把接口作为一种数据类型可以不需要了解对象所对应的具把接口作为一种数据类型可以不需要了解对象所对应的具体的类,以前面所定义的接口体的类,以前面所定义的接口Collection和实现该接口的和实现该接口的类类FIFOQueue为例,下例中,我们以为例,下例中,我们以Collection作为引作为引用类型来使用。用类型来使用。2020/12/1155第4章 类、包和接口nclass InterfaceTypenpublic static void main(String args)nCollection c=new FIIFOQueue();nnadd(obj);nnnnn2020/12/1156第4章 类、包和接口小结小结n1.完整的类定义完整的类定义nnpublic abstact|final class className extends superclassNamenimplements InterfaceNameList/类声明类声明npublic|protected|private static final transient volatile type variableName;n/成员变量声明,可为多个成员变量声明,可为多个npublic|protected|private static final|abstract native synchronizednreturnType methodName(paramList)/方法定义及实现,方法定义及实现,可为多个可为多个nthrows exceptionListnstatementsnn2020/12/1157第4章 类、包和接口n其中有三种方法要求固定的声明方式:其中有三种方法要求固定的声明方式:n(1)构造方法,声明为:构造方法,声明为:nclassName(paramlist)nnn(2)main()方法,声明为:方法,声明为:npublic static void main(String args )nnn3.finalize()方法,声明为:方法,声明为:nprotected void finalize()throws throwablennn2020/12/1158第4章 类、包和接口2.完整的接口定义完整的接口定义npublic interface InterfaceName extends superInterfaceList/接口声明接口声明ntype constantName=Value;/常量声明,常量声明,可为多个可为多个nretumType methodName(paramList);/方法声明,可为多个方法声明,可为多个n2020/12/1159第4章 类、包和接口PPT教学课件谢 谢 观 看ThankYouForWatching2020/12/1160
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!