




已阅读5页,还剩34页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
类的继承和接口,1、类的继承 2、接口 3、内部类 4、匿名类,主要知识点:,类的继承,类的继承和接口,通过继承可以从已经存在的类扩展类的功能,继承的类具有被继承类的功能和属性。 一个类通过关键字extends继承(扩展)另一个类。被继承的类称为父类或超类,继承的类称为子类。 子类可以继承父类所有的非私有成员(变量和方法)作为自己的成员。除了继承的成员,子类也可以创建自己的成员。 子类只能继承父类的非私有成员,私有成员不能继承。 当子类实例化时子类和父类的构造方法都被调用。,程序smp38.java说明类的继承,class smp381 int a=1; private int b=1000; public double c=10; void ff(long x, long y) long z; z=x*y; System.out.println(“b=“+b); System.out.println(“z=“+z); class smp382 extends smp381 float d=100.0f; public class smp38 public static void main (String args ) smp382 abc = new smp382(); System.out.println(“a=“+abc.a); System.out.println(“c=“+abc.c); System.out.println(“d=“+abc.d); abc.ff(88L,100L); ,程序smp38.java的分析和运行,类smp381中定义了三个成员变量a、b、c和一个方法ff。类smp382继承了类smp381,是smp381的子类。所以类smp382拥有类smp381除变量b以外的其他全部非私有成员。类smp382中的语句1又定义一个自己的变量d,所以该类共有a、c、d三个成员变量和一个ff方法。 语句2在类smp38中创建了类smp382的对象abc。语句36通过这个对象访问类smp382的成员变量a、c、d和方法ff。 程序的编译和运行结果如下图所示。,覆盖,如果子类中定义的某个成员方法与父类某个方法的名称、返回类型和参数完全相同,则称覆盖或重写了父类的这一方法。 如果子类中定义的某个成员变量与父类某个变量的名称、数据类型完全相同,则称覆盖或重写了父类的这个变量。 如果父类的某个成员被覆盖,该成员便被隐藏,当子类的对象访问这个成员时,将调用子类定义的成员。 通过关键字super可在子类中访问被隐藏的父类成员。super代表对父类对象的引用。 覆盖是指父类与子类间的同名变量和方法,重载是指同一个类的同名方法。 。,程序smp39.java给出了覆盖和super应用的例子,class smp391 String name=“玲玲“; int age=18; class smp392 extends smp391 String name=“张三“; int age=60; void ff() age=super.age; System.out.println(“姓名: “+name); System.out.println(“年龄: “+age); public class smp39 public static void main(String args) smp392 abc=new smp392(); abc.ff();,程序smp39.java的分析和运行,程序中子类的name和age变量覆盖了父类的相应变量。 由于通过关键字super 访问变量age,所以显示的是父类age变量。由于没有通过关键字super访问变量name,所以父类的变量被隐藏了,显示的是子类name变量。结果张三18岁,如下图所示。 关键字this和super都只能在非静态方法中使用,不能在静态方法中使用。,多态性,多态性是面向对象的程序设计方法中最强大的一种机制。 Java中的多态性是一种运行时多态,它包括: 子类对象替代父类对象技术 覆盖(OverRide)技术 重载(OverLoad)技术 抽象方法(abstract)技术 根据需要调用不同类层的同名方法称为多态性。例如在子类中覆盖父类中的方法,可产生不同类层之间的多态性。 方法重载通过不同参量加以区别,产生同一个类的多态性。,关键字final,final是终点,用关键字final声明的类称为final类。例如: final class A 被声明为final的类不能被继承,没有子类。 用final声明的方法为final方法,final方法只能使用,不能重载。 也可将变量或常量声明为final。被声明为final的变量,必须在声明时初始化(赋值)。final的变量或常量都只能读取不能修改。 将变量、常量或方法声明为final,可以对它们进行保护,保证在使用时不会改变。例如将变量xyz设置为: public static final int xyz=100; 既能对它进行访问,又能有效地保护其中的数据。,关键字abstract,通过关键字abstract修饰的类,称为抽象类。 例如: abstract class B 抽象类不能被直接实例化,抽象类必须被继承。 用关键字abstract修饰的方法称为abstract方法(抽象方法),它只提供了方法的声明,没有具体的实现。 定义了抽象方法的类必须是抽象类。 只要一个类中有抽象方法,那么这个类就一定是抽象类。 抽象类中可以没有抽象方法。 继承了带抽象方法的子类或者实现这些抽象方法,或者它本身也是抽象类 一个类不能既被声明为abstract,又被声明为final。因为final类不能有子类,而abstract类必须在子类中给出方法体以及通过子类创建对象。 类共有public、abstract和final三个修饰符。 成员变量和成员方法的修饰符有public、protected、private、static和final等。,abstract class A abstract int sum(int x,int y); int sub(int x,int y) return x-y; class B extends A int sum(int x,int y) /子类必须重写父类的sum方法 return x+y; public class Example public static void main(String args) B b=new B(); int sum=b.sum(30,20); /调用重写的方法 int sub=b.sub(30,20); /调用继承的方法 System.out.println(“sum=“+sum); System.out.println(“sum=“+sub); ,接口,接口,一方面接口和类一样,可以声明方法和对象,也可以定义变量和常量。另一方面接口不同于类,接口中声明的方法不能有方法体,也不能将对象实例化。 接口是抽象方法以及变量、常量的集合。 接口中的变量和常量都是public、static和final的,必须在声明时赋值。 通过关键字interface声明一个接口。 通过关键字implements实现接口。方法体要在实现接口的类中给出。 一个类可以继承父类的变量和方法,也可以继承接口的变量和方法。一个类只能有一个父类,但是可以有多个接口。接口也能继承其他接口。 。,接口的定义格式,public interface 接口名 extends 父接口列表 /接口体 /常量域声明 public static final 域类型 域名=常量值 /抽象方法声明 public abstract 返回值类型 方法名(参数列表)throw 异常列表; ,接口的严格解释,接口(interface)就是方法和常量的集合,为了使Java程序的类层次结构更加合理,更符合实际问题的本质,编译者可以把用于完成特定功能的若干属性组织成相对独立的属性集合;凡是需要实现这种特定功能的类,都可以继承这个属性集合并在类内使用它,这种属性集合就是接口。,接口实现,一个类要实现某个或某几个接口时,声明的格式如下: 接口一经声明与实现,即可以使用。 各接口中定义所以方法的实现。同一个接口可以由多个类来实现,但接口中的同一个方法在实现这个接口的不同的类中可以有不同的具体实现。,Class 类名 implements 接口1 接口2,接口3,接口n,程序smp3101.java说明接口的应用,interface smp3102 1 int a1=100, a2=200, a3=300; 2 void ff(); class smp3101 implements smp3102 public void ff(String s1, String s2) System.out.println(“s1+s2=“+s1+s2); public void ff(int a,int b,int c) int d; d=a+b+c; System.out.println(d); public void ff() System.out.println(“接口真的很不错!“); public class smp310 public static void main (String args ) smp3101 abc=new smp3101(); 3 abc.ff(abc.a1,abc.a2,abc.a3); 4 abc.ff(); 5 abc.ff(“I am“,“ a teacher“);,程序smp310.java的分析和运行,通过关键字interface声明smp3102是一个接口。语句1定义a1、a2、a3三个变量。语句2声明方法ff,但是在接口中不能给出它的方法体。 通过关键字implements声明类smp3101实现接口smp3102,其中给出ff的三个方法体,它们具有不同的参量,所以是方法的重载。第一个方法有两个字符串参量,第二个方法有三个整型参量,第三个方法没有参量。 在类smp310中通过类smp3101的对象abc访问了方法ff。语句3访问具有三个整型参量的ff方法,语句4访问没有参量的ff方法,语句5访问具有两个字符串参量的ff方法,结果如下图所示。,接口归纳,定义接口可归纳为如下几点: (1)在Java中接口是一种专门的类型。用interface关键字定义接口。 (2)接口中只能定义抽象方法,不能有方法体,一定是public修饰的。 (3)接口中可以定义变量,但实际上是static final修饰的常量。 (4)接口中不能定义静态方法。 接口是简单的未执行的系列以及一些抽象的方法,你可能会思考究竟接口于抽象类有什么区别。了解它们的区别是相当重要的,它们之间的区别如下: (1)接口不能包含任何可以执行的方法,而抽象类可以。 (2)类可以实现多个接口,但只有一个父类。 (3)接口不是类分级结构的一部分,而没有联系的类可以执行相同的接口。,类实现接口要注意的,一个类要实现接口时,请注意以下问题: (1)在类的声明部分,用implements关键字声明该类将要实现哪些接口。 (2)如果实现某接口的类不是abstract抽象类,则在类的定义部分必须实现指定接口的所有抽象方法,即为所有抽象方法定义方法体,而且方法头部分应该与接口中的定义完全一致,即有完全相同的返回值和参数列表。 (3)如果实现某接口的的类是abstract的抽象类,则它可以不实现该接口所有的方法。但是对于这个抽象类任何一个非抽象的子类而言,它们父类所实现的接口中的所有抽象方法都必须有实在的方法体。这些方法体可以来自抽象的父类,也可以来自子类自身,但是不允许存在未被实现的接口方法。这主要体现了非抽象类中不能存在抽象方法的原则。 (4)个类在实现某接口的抽象方法时,必须使用完全相同方法头。如果所实现的方法与抽象方法有相同的方法名和不同的参数列表,则只是在重载一个新的方法,而不是实现已有的抽象方法。 (5)接口的抽象方法的访问限制符都已制定为public,所以类在实现方法时,必须显式地使用public修饰符,否则将被系统警告为缩小了接口中定义的方法的访问控制范围。,接口回调,接口回调是多态的另一种体现,接口回调是指:可以把使用某一接口的类创建的对象的引用赋给该接口声明的接口变量中,那么该接口变量就可以调用被类实现的接口中的方法,当接口变量调用被类实现的接口中的方法时,就是通知相应的对象调用接口的方法,这一过程称作对象功能的接口回调。不同的类在使用同一接口时,可能具有不同的功能体现,即接口的方法体不必相同,因此,接口回调可能产生不同的行为。,interface ShowMessage void showTradeMark(); class TV implements ShowMessage public void showTradeMark() System.out.println(“我是电视机“); class PC implements ShowMessage public void showTradeMark() System.out.println(“我是电脑“); public class Example public static void main(String args) ShowMessage sm; /声明接口变量。 sm=new TV(); /接口变量中存放对象的引用。 sm.showTradeMark(); /接口回调。 sm=new PC(); /接口变量中存放对象的引用。 sm.showTradeMark(); /接口回调。 运行结果是: 我是电视机 我是电脑,包,包是类和接口的集合。 由于在默认情况下,允许同一个包中的类互相访问,所以通常将同类型的、相关的类放在同一个包中,有利于编程和管理。 程序经过编译,每一个类和接口都要生成一个类文件。Java将许多常用类和接口生成的类文件放在某些包中,只要在程序开头引入了这些包,就可以在程序中调用包中的类。这样既方便了编程人员,又可重复使用重要的类,可大大减轻编程人员的工作并有利于精简程序。 如果要使用某个包中的类,通常需要在程序开头通过关键字import导入该包。但是也有的包不需要导入,例如java.lang不需要导入就可以直接使用其中的类文件。关于包的导入和应用将在后面的章节通过例题说明。,常用的包举例,Java按照功能将类存放在不同的包中,提供了60来个包,例如以下是一些常用的包: java.lang 包含基础语言类。 java.io 包含输入输出类。 包含与网络有关的类。 java.util 包含与数据处理、时间控制等有关的类。 java.applet 包含与Applet小应用程序有关的类。 java.awt.event 包含与人机交互、事件处理等有关的类。 java.awt 包含与图形用户界面有关的类。 javax.swing 包含与图形用户界面有关的类,功能比AWT强大。,内部类,内部类,类可以有两种重要的成员:成员变量和方法,类还可以有一种成员:内部类。 Java支持在一个类中声明另一个类,这样的类称作内部类,而包含内部类的类成为内部类的外嵌类。内部类同类中声明的方法或成员变量一样,一个类把内部类看作是自己的成员。外嵌类的成员变量在内部类中仍然有效,内部类中的方法也可以调用外嵌类中的方法。内部类的类体中不可以声明类变量和类方法。外嵌类可以用内部类声明对象,作为外嵌类的成员 在一个类的内部还可以定义类,这就是内部类,也称为嵌套类。,内部类,内部类本身是一个类,但它同时又是外部类一个成员。作为外部类的成员,它可以毫无限制地访问外部类的变量和方法,包括private成员。这和private的含义并不矛盾,因为private修饰符只是限制从一个类的外部访问该类成员的权限,而内部类在外部类内部,所以它可以访问外部类的所有资源。,内部类,内部类的分类 静态内部类、 成员内部类、 本地内部类 匿名内部类。,内部类实例1,public class China final String song=“义勇军进行曲“; private Beijing beijing; /内部类声明的对象,作为外嵌类的成员 China() beijing=new Beijing(); public Beijing getBeijing() return beijing; String getSong() return song; class Beijing /内部类的声明 String name=“北京“; void speak() System.out.printf(“%sn%s“,“我们是“+name,“我们的国歌是:“+getSong(); ,内部类实例1,public class Example public static void main(String args) China china=new China(); china.getBeijing().speak(); ,匿名类,匿名类,匿名类是不能有名称的类,所以没办法引用它们。必须在创建时,作为new语句的一部分来声明它们。 这就要采用另一种形式的new语句,如下所示: new 这种形式的new语句声明一个新的匿名类,它对一个给定的类进行扩展,或者实现一个给定的接口。它还创建那个类的一个新实例,并把它作为语句的结果而返回。要扩展的类和要实现的接口是new语句的操作数,后跟匿名类的主体。,和类有关的匿名类,Java允许我们直接使用一个类的子类的类体创建一个子类对象。 创建子类对象时,除了使用父类的构造方法外还有类体,此类体被认为是一个子类去掉类声明后的类体,称作匿名类。 假设People是类,那么下列代码就是用People的一个子类(匿名类)创建对象: new People () 匿名类的类体 ;,和接口有关的匿名类,假设Computable是一个接口,那么,Java允许直接用接口名和一个类体创建一个匿名对象,此类体被认为是实现了Computable接口的类去掉类声明后的类体,称作匿名类。 下列代码就是用实现了Computable接口的类(匿名类)创建对象: new Computable() 实现接口的匿名类的类体 ,匿名类举例,abstract class Speak public abstract void speakHello(); class Student void f(Speak sp) sp.speakHello(); public class Example public static void
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026届广西部分校高三语文上学期开学检测试卷附答案解析
- 建筑公司财务工作总结(合集6篇)
- 山西省运城市河津市2024-2025学年七年级下学期期末考试数学试卷(含答案)
- 《伦理与人生》知到智慧树答案
- 绿色建筑材料市场潜力与挑战
- 颁奖典礼发言范本
- 2025实验室分析台合同
- 汇票业务基础知识培训课件
- 水路运输基本知识培训课件
- 混凝土试块制作与强度检测方案
- 健身数据分析与管理平台企业制定与实施新质生产力战略研究报告
- 小学与初中科学课程衔接策略
- (完整版)西门子ARCADICOrbic3D三维C型臂培训
- 检验科免疫室工作制度
- 《智能感知技术》课件
- 2024年中国VHB泡棉胶带市场调查研究报告
- 7s管理工作汇报
- 金融科技推动新质生产力发展
- 肝脓肿合并糖尿病业务查房
- 实验室安全教育考试题库实验室安全考试题库及答案
- 企业员工职业道德考核制度
评论
0/150
提交评论