Java抽象类
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第四章 抽象类和接口
Java中的抽象类、接口和程序包 ——抽象类与抽象方法
❖ 抽象类:用abstract关键字来修饰一个类时,该类 叫做抽象类;
❖抽象类必须被继承。 ❖抽象类不能被直接实例化。它只能作为其它类的超类,
这一点与最终类(final类)正好相反。
❖ 抽象方法:用abstract来修饰一个方法时,该方法 叫做抽象方法。
口名,并在该类中重写接口中的所有成员方法且给出成员 函数体定义。 要点 ❖类中所实现的接口中的成员函数的原型都应该与它在
接口中的原型定义保持一致; ❖并在类中重写接口中的所有成员方法; ❖通过实现接口,从而可扩充或增加该类的功能。 ❖接口只定义方法名,而类实现接口内部的方法的代码 ❖接口的继承只是继承接口本身,而非代码,从而不会产
接口的概念
在构建问题的类过程中,我们经常会遇到一种特 殊的情况,在描述某个类的各个方法时,对每 个方法我们只能给出其功能实现的要求(原形 声明)但不能给出具体的功能实现(函数定义 体)。
因为我们所处理的问题只是一个泛泛的功 能说明,并没有针对某一具体类型的问题来说 明。
接口定义格式
要点:类似于类的定义格式,只是以 interface作为定义符。 格式:
❖构造方法、类方法不能声明为抽象方法 ❖抽象类的子类必须给出抽象类中的抽象方法的具体实现,
除非该子类也是抽象类
抽象类和最终类
❖抽象类的意义:
❖描述抽象的概念,规定必须实现的方法的统一 接口
❖ 关于抽象类和抽象方法 Abstracttest.java
❖ 最终类和最终方法
❖final关键字修饰的类称为最终类,最终类不能被继承 ❖final关键字修饰的方法称为最终方法,最终方法不能被
在描述某一个问题时,如果只能给出部分的功能实现,而 不能给出全部的功能实现时,应该采用抽象类来描述。
接口的应用
interface TV { public int Size=29;
public abstract void showImage(); public abstract void setChannel(); public abstract void receiveImage(); } 在描述某一个问题时,如果不能给出任何的功能实 现,应该采用接口来描述。
❖抽象方法必须被重写 ❖抽象方法只有声明,不能有实现。 ❖定义了抽象方法的类必须是抽象类。
❖abstract returnType abstractMethod ( [paramlist] );
——抽象类与抽象方法
抽象类和最终类
声明抽象类与抽象方法 public abstract class PlaneGraphics1//平面图形类,抽
内部类
声明内部类 在一个类中包含另一个类的定义 内部类可以在类、方法甚至语句块中定义 内部类可以是private或protected的
❖ 内部类作用
❖与接口一起实现完整的多重继承 ❖ 内部类作用
InnerClass.java ❖ 内部类具有访问外部类的引用
内部类
//内部类引用外部类的成员 public class Inner2
❖java的匿名内部类的语法规则看上去有些古怪,当你只 需要创建一个类的对象而且用不上它的名字时,使用内 部类可以使代码看上去简洁清楚。它的语法规则是这样 的:
❖new interfacename(){......}; 或 ❖new superclassname(){......};
❖ 有一点需要注意的是,匿名内部类由于没有名字,所以它 没有带名字的构造函数(但是如果这个匿名内部类继承了 一个只含有带参数构造函数的父类,创建它的时候必须带 上这些参数,并在实现的过程中使用super关键字调用相应 的内容)。如果你想要初始化它的成员变量,有下面几种 方法:
String getName(); } Goods SportShoe () {
return new Goods() {//匿名内部类
String name = "运动鞋"; int price = 200; public String getName(){return name;} }; } } //事实上匿名内部类必须继承一个类或实现一个接口
例子:Interfacetest.java
interface Computer
{
public void ComputeData(); //计算机应该有数据计算的功能
public void SaveData(); //计算机应该有存储数据的功能
public void PrintData(); //计算机应该有打印数据的功能
象类 {
public abstract double area(); //计算面积,抽象
方法,分号“;”必不可少 }
抽象类和最终类
❖ 规定:
❖抽象类不能被直接实例化,只有它的非抽象子类可以创 建对象
❖抽象类中不一定包含抽象方法,但有抽象方法的类必定 是抽象类
❖抽象类中的抽象方法只是声明,不包含方法体,即不给 出方法的实现
接口与抽象类的区别
抽象类和接口中主要关心的都是抽象,而不关心具 体的实现。但也有一些区别:
一个类只能继承一个类,但可以实现多个接口 抽象类表示一种继承关系,接口只说明功能
二者的区别主要体现在对问题域的理解上
抽象类的应用
❖ abstract class Person ❖ { private int ID; ❖ private String Name; ❖ public abstract void Eat(Food obj); ❖ public void Step(Feet obj) ❖{ ❖} ❖ public void Sleep() ❖{ ❖} ❖}
System.out.println("bb.b="+bb.this.b);//内部类引用外部类成员
System.out.println("aa.a="+aa.this.a); }
} } } }
内部类
❖匿名内部类
❖当只需创建一个类的对象而用不上它的名字时,可以使 用匿名内部类
❖匿名内部类由于没有名字,所以它没有带名字的构造函 数
public void DisplayData(); //计算机应该有显示数据的功能
}
例子
抽象类和接口的对比
接口和类是很相似但又有区别的一种数据结构,其设计和调 用也是JAVA程序设计的一种重要技术。
从结构上看,接口有如下特点: 接口用interface来定义,而不是class 接口中定义的变量去全部是最终的静态变量 接口中没有自身的构造方法,不能创建实例,而定义的 其 他方法全是抽象方法,即提供了方法的定义,但是没有 提供方法的实现。 接口采用多重继承机制,而不是采用单一的继承机制。
覆盖 ❖最终方法和最终类没有必然的对应关系
Java中的接口
1、含义: 一组只有成员函数原型定义而无成员函数定义体的方法集。 接口定义了一组成员函数,但没有具体加以实现,其实现则是由实
现该接口的类来加以具体完成的。
2、作用: 为若干个类(相关或无关的类)定义一组相同的功能行为,从而达到相
同的功能名称,不同的功能实现之目的; 另外也可以实现类似C++语言中的多重继承但又避免了虚基类的编程。
生重复继承多次。
注意的
❖ 一个类可以实现多个接口 ❖ 实现接口的类必须给出接口中所有方法的具体实现!除非这个类是
抽象类 ❖ 接口的作用
❖ 接口提供了完全的抽象 ❖ 说明所有实现该接口的类应具有的形式 ❖ 接口中的方法在多个实现接口的类中表现出多态性
❖ 接口回调 ❖接口也是引用数据类型,指向接口的引用也可以指向任 意实现了该接口的类创建的实例 ❖接口回调,即接口的引用可以指向实现了接口的类的实 例
接口的类型interface 接口名
{
常量(并且必须初始化 );
成员方法定义(只有原形而无函数定义体 );
}或: 接口的类型interface 派生的接口名 extends 父接口名列表
{ 接口中的成员变量定义; 接口中的成员方法原型定义;
}
实现接口
方法: 通过定义一个类同时采用implements来指明所实现的接
{ class aa
{ int a=1; class bb
{ int b=2; class cc
{ {//这对括号必须有,因为类中语句必须包含在一个代 码百度文库或方法体中
int b=4; int c=3; System.out.println("cc"); System.out.println("cc.c="+c);
❖ 如果是在一个方法内部的匿名内部类,可以利用这个方法 传进你想要的参数,不过记住,这些参数必须被声明为 final。
❖ 将匿名内部类改造成有名字的局部内部类,这样它就可以 拥有有名字的构造函数了。
❖ 在这个匿名内部类中使用初始化代码块。
❖ 匿名内部类实例 class PackBox {
interface Goods //定义内部接口 {
Java中的抽象类、接口和程序包 ——抽象类与抽象方法
❖ 抽象类:用abstract关键字来修饰一个类时,该类 叫做抽象类;
❖抽象类必须被继承。 ❖抽象类不能被直接实例化。它只能作为其它类的超类,
这一点与最终类(final类)正好相反。
❖ 抽象方法:用abstract来修饰一个方法时,该方法 叫做抽象方法。
口名,并在该类中重写接口中的所有成员方法且给出成员 函数体定义。 要点 ❖类中所实现的接口中的成员函数的原型都应该与它在
接口中的原型定义保持一致; ❖并在类中重写接口中的所有成员方法; ❖通过实现接口,从而可扩充或增加该类的功能。 ❖接口只定义方法名,而类实现接口内部的方法的代码 ❖接口的继承只是继承接口本身,而非代码,从而不会产
接口的概念
在构建问题的类过程中,我们经常会遇到一种特 殊的情况,在描述某个类的各个方法时,对每 个方法我们只能给出其功能实现的要求(原形 声明)但不能给出具体的功能实现(函数定义 体)。
因为我们所处理的问题只是一个泛泛的功 能说明,并没有针对某一具体类型的问题来说 明。
接口定义格式
要点:类似于类的定义格式,只是以 interface作为定义符。 格式:
❖构造方法、类方法不能声明为抽象方法 ❖抽象类的子类必须给出抽象类中的抽象方法的具体实现,
除非该子类也是抽象类
抽象类和最终类
❖抽象类的意义:
❖描述抽象的概念,规定必须实现的方法的统一 接口
❖ 关于抽象类和抽象方法 Abstracttest.java
❖ 最终类和最终方法
❖final关键字修饰的类称为最终类,最终类不能被继承 ❖final关键字修饰的方法称为最终方法,最终方法不能被
在描述某一个问题时,如果只能给出部分的功能实现,而 不能给出全部的功能实现时,应该采用抽象类来描述。
接口的应用
interface TV { public int Size=29;
public abstract void showImage(); public abstract void setChannel(); public abstract void receiveImage(); } 在描述某一个问题时,如果不能给出任何的功能实 现,应该采用接口来描述。
❖抽象方法必须被重写 ❖抽象方法只有声明,不能有实现。 ❖定义了抽象方法的类必须是抽象类。
❖abstract returnType abstractMethod ( [paramlist] );
——抽象类与抽象方法
抽象类和最终类
声明抽象类与抽象方法 public abstract class PlaneGraphics1//平面图形类,抽
内部类
声明内部类 在一个类中包含另一个类的定义 内部类可以在类、方法甚至语句块中定义 内部类可以是private或protected的
❖ 内部类作用
❖与接口一起实现完整的多重继承 ❖ 内部类作用
InnerClass.java ❖ 内部类具有访问外部类的引用
内部类
//内部类引用外部类的成员 public class Inner2
❖java的匿名内部类的语法规则看上去有些古怪,当你只 需要创建一个类的对象而且用不上它的名字时,使用内 部类可以使代码看上去简洁清楚。它的语法规则是这样 的:
❖new interfacename(){......}; 或 ❖new superclassname(){......};
❖ 有一点需要注意的是,匿名内部类由于没有名字,所以它 没有带名字的构造函数(但是如果这个匿名内部类继承了 一个只含有带参数构造函数的父类,创建它的时候必须带 上这些参数,并在实现的过程中使用super关键字调用相应 的内容)。如果你想要初始化它的成员变量,有下面几种 方法:
String getName(); } Goods SportShoe () {
return new Goods() {//匿名内部类
String name = "运动鞋"; int price = 200; public String getName(){return name;} }; } } //事实上匿名内部类必须继承一个类或实现一个接口
例子:Interfacetest.java
interface Computer
{
public void ComputeData(); //计算机应该有数据计算的功能
public void SaveData(); //计算机应该有存储数据的功能
public void PrintData(); //计算机应该有打印数据的功能
象类 {
public abstract double area(); //计算面积,抽象
方法,分号“;”必不可少 }
抽象类和最终类
❖ 规定:
❖抽象类不能被直接实例化,只有它的非抽象子类可以创 建对象
❖抽象类中不一定包含抽象方法,但有抽象方法的类必定 是抽象类
❖抽象类中的抽象方法只是声明,不包含方法体,即不给 出方法的实现
接口与抽象类的区别
抽象类和接口中主要关心的都是抽象,而不关心具 体的实现。但也有一些区别:
一个类只能继承一个类,但可以实现多个接口 抽象类表示一种继承关系,接口只说明功能
二者的区别主要体现在对问题域的理解上
抽象类的应用
❖ abstract class Person ❖ { private int ID; ❖ private String Name; ❖ public abstract void Eat(Food obj); ❖ public void Step(Feet obj) ❖{ ❖} ❖ public void Sleep() ❖{ ❖} ❖}
System.out.println("bb.b="+bb.this.b);//内部类引用外部类成员
System.out.println("aa.a="+aa.this.a); }
} } } }
内部类
❖匿名内部类
❖当只需创建一个类的对象而用不上它的名字时,可以使 用匿名内部类
❖匿名内部类由于没有名字,所以它没有带名字的构造函 数
public void DisplayData(); //计算机应该有显示数据的功能
}
例子
抽象类和接口的对比
接口和类是很相似但又有区别的一种数据结构,其设计和调 用也是JAVA程序设计的一种重要技术。
从结构上看,接口有如下特点: 接口用interface来定义,而不是class 接口中定义的变量去全部是最终的静态变量 接口中没有自身的构造方法,不能创建实例,而定义的 其 他方法全是抽象方法,即提供了方法的定义,但是没有 提供方法的实现。 接口采用多重继承机制,而不是采用单一的继承机制。
覆盖 ❖最终方法和最终类没有必然的对应关系
Java中的接口
1、含义: 一组只有成员函数原型定义而无成员函数定义体的方法集。 接口定义了一组成员函数,但没有具体加以实现,其实现则是由实
现该接口的类来加以具体完成的。
2、作用: 为若干个类(相关或无关的类)定义一组相同的功能行为,从而达到相
同的功能名称,不同的功能实现之目的; 另外也可以实现类似C++语言中的多重继承但又避免了虚基类的编程。
生重复继承多次。
注意的
❖ 一个类可以实现多个接口 ❖ 实现接口的类必须给出接口中所有方法的具体实现!除非这个类是
抽象类 ❖ 接口的作用
❖ 接口提供了完全的抽象 ❖ 说明所有实现该接口的类应具有的形式 ❖ 接口中的方法在多个实现接口的类中表现出多态性
❖ 接口回调 ❖接口也是引用数据类型,指向接口的引用也可以指向任 意实现了该接口的类创建的实例 ❖接口回调,即接口的引用可以指向实现了接口的类的实 例
接口的类型interface 接口名
{
常量(并且必须初始化 );
成员方法定义(只有原形而无函数定义体 );
}或: 接口的类型interface 派生的接口名 extends 父接口名列表
{ 接口中的成员变量定义; 接口中的成员方法原型定义;
}
实现接口
方法: 通过定义一个类同时采用implements来指明所实现的接
{ class aa
{ int a=1; class bb
{ int b=2; class cc
{ {//这对括号必须有,因为类中语句必须包含在一个代 码百度文库或方法体中
int b=4; int c=3; System.out.println("cc"); System.out.println("cc.c="+c);
❖ 如果是在一个方法内部的匿名内部类,可以利用这个方法 传进你想要的参数,不过记住,这些参数必须被声明为 final。
❖ 将匿名内部类改造成有名字的局部内部类,这样它就可以 拥有有名字的构造函数了。
❖ 在这个匿名内部类中使用初始化代码块。
❖ 匿名内部类实例 class PackBox {
interface Goods //定义内部接口 {