1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Java接口 多态 向上转型 向下转型的意义

Java接口 多态 向上转型 向下转型的意义

时间:2020-11-24 21:16:06

相关推荐

Java接口 多态 向上转型 向下转型的意义

接口

官方解释:Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现 ,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。

包含内容:

(Java 7)变量,抽象方法

(Java 8)默认方法,静态方法

(Java 9)私有方法

为什么要使用接口?

接口可以解决Java无法多继承的缺陷

定义接口方法 :关键字为interface

public interface USB {//变量//方法体}

定义接口类(实现接口)方法

public class computer implements USB {//方法体}

1. 抽象方法(abstract)

使用规则:接口的实现类必须覆盖重写(实现)接口中的抽象方法 去掉abstract关键字,加上方法体大括号

使用方法:接口类对象.方法名称();

接口

public interface USB {public abstract void read(); //抽象方法——读}

接口类

public class computer implements USB {@Override //覆盖重写public void read() {System.out.println("这是一个抽象方法");}}

2.默认方法(default)

目的:实现接口升级,无需再在接口类中重写

使用方法:接口类对象.方法名称();

public interface USB {public default void method(){System.out.println("这是一个默认方法");}}

3.静态方法(static)

目的同类对象共享的内容

使用方法:接口名称.方法名称();

public interface USB {public static void method(){System.out.println("这是一个静态方法");}}

4.私有方法

私有方法 只有接口中的静态/默认方法可以使用 private

多态

多态是java继封装性,继承性之后的第三大特性,extends继承和implements接口实现,是多态的前提

为什么要用多态? 我们现实中的事物常常会有许多形态,比如小明即是一个人也是一个学生,

代码中体现多态,就是父类引用指向子类对象

向上转型格式:

父类类型 变量名 = new 子类类型接口名称 变量名 = new 实现类名称

向下转型格式:

子类类型 变量名 = (子类类型) 父类对象实现类名称 对象名称 = (实现类名称) 接口名称

向上转型的意义:当接口中的方法已经能够满足需求时,这样更加安全方便

向下转型的意义:能够访问接口类中的独有方法,这些方法接口中不存在

主方法中

访问成员方法:new谁就优先使用谁 没有向上找

访问成员变量

1.直接通过对象名称访问:看等号左边是谁 优先使用 没有则向上找

2.间接通过成员方法访问:看方法属于谁 优先使用 没有则向上找

总结一句话就是:

成员变量)编译看左边,运行看左边

成员方法)编译看左边,运行看右边

举个例子

我建立了一个USB的接口,它的功能是(打开/关闭)设备.

public interface USB {public abstract void open(); //打开设备public abstract void close(); //关闭设备}

它拥有两个接口类(鼠标和键盘)来实现接口

这两个接口类有覆盖方法和自己独有的方法

鼠标接口类

public class Mouse implements USB{@Overridepublic void open() {System.out.println("打开鼠标");}@Overridepublic void close() {System.out.println("关闭鼠标");}/*** Mouse独有的方法*/public void click(){System.out.println("点击鼠标");}}

键盘接口类

public class KeyBoard implements USB{@Overridepublic void open() {System.out.println("打开键盘");}@Overridepublic void close() {System.out.println("关闭键盘");}/*** KeyBoard独有方法*/public void click1(){System.out.println("敲击键盘");}}

有一个电脑设备去使用接口

public class Cmoputer {//笔记本自己的方法public void PowerOn(){System.out.println("笔记本开机");}public void PowerOff(){System.out.println("笔记本关机");}//使用设备方法public void useDevice(USB obj){obj.open(); //打开设备if(obj instanceof Mouse){Mouse useMouse = (Mouse)obj; //如果obj对象是Mouse类创建 就向下转型useMouse.click(); //调用Mouse类中click独有的方法}else if(obj instanceof KeyBoard){KeyBoard useKeyBoard =(KeyBoard)obj; //如果obj对象是KeyBoard类创建 就向下转型useKeyBoard.click1();}obj.close(); //关闭设备}}

在主方法中我们可以测试

public class Demo01Test {public static void main(String[] args) {Cmoputer cmoputer = new Cmoputer();//创建一个computer对象USB mouse = new Mouse(); //向上转型cmoputer.PowerOn(); //笔记本自己的方法cmoputer.useDevice(mouse); //接口实现的方法cmoputer.PowerOff(); //笔记本自己的方法}}

测试结果:笔记本开机打开鼠标点击鼠标 //通过向下转型实现接口没有 但是接口类中拥有的方法关闭鼠标 笔记本关机

以上代码的示例图

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。