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

接口

  • 接口中可以规定方法的原型:方法名、参数列表以及返回类型,
    但不规定方法主体;
  • 也可以包含基本数据类型的数据成员,但它们都默认为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..{

}

注意:最后送大家十套2020最新Java架构实战教程+大厂面试题库,进裙 783802103 在裙文件下载一起交流进步哦! 进来获取 一起交流进步哦!

类型转换

类型转换的概念

  • 又称为塑型(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()方法

多态的目的

  • 使代码变得简单且容易理解;
  • 使程序具有很好的可扩展性。

注意:最后送大家十套2020最新Java架构实战教程+大厂面试题库,进裙 783802103 在裙文件下载一起交流进步哦! 进来获取 一起交流进步哦!

原创文章 477 获赞 912 访问量 28万+

猜你喜欢

转载自blog.csdn.net/qq_41505957/article/details/105893321