学习Java,你需要知道这些——接口与多态

Helena ·
更新时间:2024-11-13
· 519 次阅读

文章目录接口接口的作用接口的语法实现接口实现多个接口的语法接口的扩展类型转换类型转换的概念类型转换规则隐式类型转换显式类型转换类型转换的主要应用场合类型转换的主要应用场合多态多态的概念多态的目的 接口 接口中可以规定方法的原型:方法名、参数列表以及返回类型,
但不规定方法主体; 也可以包含基本数据类型的数据成员,但它们都默认为static和
final。 接口的作用 继承多个设计。 建立类和类之间的“协议” 将类根据其实现的功能分组用接口代表,而不必顾虑它所在的类继承层次;这样可以最大限度地利用动态绑定隐藏实现细节。 实现不同类之间的常量共享。 接口的语法 声明格式为 [接口修饰符] interface接口名称[extends父接口名]{ ..//方法的原型声明或静态常量

接口的数据成员一定要有初值,且此值将不能再更改,可以省略
final关键字。

接口中的方法必须是“抽象方法” ,不能有方法体,可以省略
public及abstract关键字。

声明一个接口Shape2D ,包括π和计算面积的方法原型

interface Shape2D{ //声明Shape2D接口 final double pi=3.14;//数据成员-定要初始化 public abstract double area(); //抽象方法 }

在接口的声明中,允许省略一些关键字 ,也可声明如下

interface Shape2D{ double pi=3.14; double area(); } 实现接口 利用接口设计类的过程,称为接口的实现,使用implements
关键字,语法如下: public class类名称implements接口名称{ //在类体中实现接口的方法 //本类声明的更多变量和方法 } 注意: 必须实现接口中的所有方法 ; 来自接口的方法必须声明成public。

Circle实现Shape2D接口

public class Circle implements Shape2D { double radius; public Circle(double r) { radius=r; } public double area(){ return (pi * radius * radius); } }

Rectangle类实现Shape2D接口

class Rectangle implements Shape2D { int width,height; public Rectangle(int w,int h) { width=w; height=h; } public double area(){ return (width * height); } }

接口测试类

public class InterfaceTester { public static void main(String args[]){ Rectangle rect=new Rectangle(5,6); System.out.println("Area of rect="+ rect.area()); Circle cir=new Circle(2.0); System.out.println("Area ofcir= " + cir.area()); } }

运行结果
在这里插入图片描述
如果在声明时将两个变量声明为Shape2D类型,在使用时将会自动转换。

public class InterfaceTester { public static void main(String args[]){ Shape2D rect, cir; rect=new Rectangle(5,6); System.out.println("Area of rect="+ rect.area()); cir=new Circle(2.0); System.out.println("Area ofcir= " + cir.area()); } }

运行结果:
在这里插入图片描述

实现多个接口的语法 一个类可以实现多个接口,通过这种机制可实现对设计的多重继承。 实现多个接口的语法如下 [类修饰符] class类名称implements 接口1,接口2, ...{ } 声明Circle类实现接口Shape2D和Color Shape2D具有常量pi与area()方法,用来计算面积; Color则具有setColor方法,可用来赋值颜色; 通过实现这两个接口,Circle类得以同时拥有这两个接口的成员,达到了对设计进行多重继承的目的。 interface Shape2D{ //声明Shape2D接口 final double pi=3.14; //数据成员一定要初始化 public abstract double area(); //抽象方法 } interface Color{ void setColor(String str); //抽象方法 }

实现多接口

public class Circle implements Shape2D,Color { double radius; String color; public Circle(double r) { radius=r; } public double area(){ return (pi * radius * radius); } public void setColor(String str){//定义setColor()的处理方式 color=str; System.out.println("color=" +color); } }

测试类:

public class InterfaceTester { public static void main(String args[]){ Circle cir; cir=new Circle(2.0); cir.setColor("blue"); System.out.println("Area of cir= " + cir.area()); } }

运行结果:
在这里插入图片描述

接口的扩展 实现一个接口的类也必须实现其超接口。 接口扩展的语法 interface子接口的名称extends超口的名称1 ,超接口的名称2,..{ } 类型转换 类型转换的概念 又称为塑型(type-casting)。 转换方式 隐式的类型转换; 显式的类型转换。 转换方向 向上转型; 向下转型, 类型转换规则 基本类型之间的转换 将值从一种类型转换成另-种类型。 引用变量的类型转换 将引用转换为另一类型的引用,并不改变对象本身的类型。 只能被转为 任何一个(直接或间接)超类的类型(向上转型); 对象所属的类(或其超类)实现的一一个接口(向上转型) ; 被转为引用指向的对象的类型(唯一可以向 下转型的情况)。 当一个引用被转为其超类引用后,通过他能够访问的只有在超类中声
明过的方法。 隐式类型转换 基本数据类型
可以转换的类型之间,存储容量低的自动向存储容量高的类型转换。 引用变量
被转成更一般的类,例如: Employee emp; emp = new Manager(); //将Manager类型的对象直接赋给 //Employee类的引用变量,系统会 //自动将Manage对象塑型为Employee类 被塑型为对象所属类实现的接口类型,例如: Car jetta = new Car(); Insurable item = jetta; 显式类型转换 基本数据类型 (int)871.34354;// 结果为871 (char)65;//结果为'A' (long)453;//结果为453L 引用变量 Employee emp; Manager man; emp = new Manager(); man = (Manager)emp; //将emp显式转换为它指向的对象的类型 类型转换的主要应用场合 赋值转换 方法调用转换 算术表达式转换 字符串转换 类型转换的主要应用场合 赋值转换
赋值运算符右边的表达式或对象类型转换为左边的类型; 方法调用转换
实参的类型转换为形参的类型; 算术表达式转换
算数混合运算时 ,不同类型的操作数转换为相同的类型再进行运算 ; 字符串转换
字符串连接运算时,如果一个操作数为字符串,另一个操作数为其他类型 ,则会自动将其他类型转换为字符串。 多态 多态的概念 超类对象和从相同的超类派生出来的多个子类的对象,可被当作同一种类型的对象对待; 实现同一接口不同类型的对象,可被当作同一种类型的对象对待; 可向这些不同的类型对象发送同样的消息,由于多态性,这些不同类
的对象响应同一消息时的行为可以有所差别。 例如 所有的Object类的对象都响应toString()方法 所有的BankAccount类的对象都响应deposit()方法 多态的目的 使代码变得简单且容易理解; 使程序具有很好的可扩展性。 张宜强 原创文章 474获赞 808访问量 27万+ 关注 他的留言板 关注博主即可阅读全文
作者:张宜强



学习java JAVA 多态 接口

需要 登录 后方可回复, 如果你还没有账号请 注册新账号