文章目录
- 接口
- 接口的作用
- 接口的语法
- 实现接口
- 实现多个接口的语法
- 接口的扩展
- 类型转换
- 类型转换的概念
- 类型转换规则
- 隐式类型转换
- 显式类型转换
- 类型转换的主要应用场合
- 类型转换的主要应用场合
- 多态
- 多态的概念
- 多态的目的
接口
- 接口中可以规定方法的原型:方法名、参数列表以及返回类型,
但不规定方法主体; - 也可以包含基本数据类型的数据成员,但它们都默认为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()方法
多态的目的
- 使代码变得简单且容易理解;
- 使程序具有很好的可扩展性。