为什么接口之间可以强制类型转换?

一只红烧虾 2020-04-28 09:07:09
为什么接口类型之间可以进行强制类型转换?
...全文
821 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
android_cai_niao 2020-05-11
  • 打赏
  • 举报
回复 2
气死我了,上才艺!! toOverlap是OverlapSensitive类型,又能强转为CanBeAttacked,说明toOverlap对象即可以是OverlapSensitive类型也可以是CanBeAttacked类型,不用管这两个接口是否继承关系,示例代码如下:

    interface 会飞的 {
        void 飞();
    }
 
    interface 会跑的 {
        void 跑();
    }
 
    static class 鸭子 implements 会飞的, 会跑的 {
 
        @Override
        public void 飞() {
            System.out.println("幸福地飞啊飞!!");
        }
 
        @Override
        public void 跑() {
            System.out.println("愉快地飞啊飞!!");
        }
    }
 
    public static void main(String[] args) throws Exception{
        会飞的 飞鸭 = new 鸭子();
        会跑的 跑鸭 = (会跑的) 飞鸭;
        跑鸭.跑();
    }
这里的鸭子,你可以说它属于会飞的,也可以说它属于会跑的,是不是很容易理解啊,如果解决了你的问题,麻烦结贴给点积分,谢谢^_^
宾灬 2020-04-29
  • 打赏
  • 举报
回复

Object i = new Integer();
Integer j = (Integer)i; // 可以转换

Object o = new Object();

Integer k = (Integer)o; // 不可以
qybao 2020-04-28
  • 打赏
  • 举报
回复
你可以查看代码,如果OverlapSenstive是接口,那它肯定是extends了CanbeAttackted,如果OverlapSenstive是接口实现类,那它肯定implements了CanbeAttackted。 lz最好找本入门级的书再好好看看学学接口的继承和实现的知识。
qq_39936465 2020-04-28
  • 打赏
  • 举报
回复
引用 2 楼 一只223317 的回复:
[quote=引用 1 楼 qq_39936465的回复:][quote=引用 楼主 一只223317 的回复:] 为什么接口类型之间可以进行强制类型转换?
举个例子来说,不然说不清楚、[/quote] CanBeAttacked toBeAttacked=(CanBeAttacked)toOverlap toOverlap是OverlapSensitive类型的 CanBeAttacked 和 OverlapSensitive都是接口 为什么这里能够实现强制类型转换?[/quote] 一般能强制转换必然有继承实现关系,光看名字看不出什么。
sunyiz 2020-04-28
  • 打赏
  • 举报
回复
类可以实现多个接口啊,如果强制转换在代码执行时没报错,就说明这个类同时实现了这两个接口
kse_music 2020-04-28
  • 打赏
  • 举报
回复
引用 2 楼 一只223317 的回复:
[quote=引用 1 楼 qq_39936465的回复:][quote=引用 楼主 一只223317 的回复:] 为什么接口类型之间可以进行强制类型转换?
举个例子来说,不然说不清楚、[/quote] CanBeAttacked toBeAttacked=(CanBeAttacked)toOverlap toOverlap是OverlapSensitive类型的 CanBeAttacked 和 OverlapSensitive都是接口 为什么这里能够实现强制类型转换?[/quote] 如果你能直接转 说明OverlapSensitive是CanBeAttacked的扩展接口,如果是独立得需要instanceof判断
一只红烧虾 2020-04-28
  • 打赏
  • 举报
回复
引用 1 楼 qq_39936465的回复:
[quote=引用 楼主 一只223317 的回复:] 为什么接口类型之间可以进行强制类型转换?
举个例子来说,不然说不清楚、[/quote] CanBeAttacked toBeAttacked=(CanBeAttacked)toOverlap toOverlap是OverlapSensitive类型的 CanBeAttacked 和 OverlapSensitive都是接口 为什么这里能够实现强制类型转换?
qq_39936465 2020-04-28
  • 打赏
  • 举报
回复
引用 楼主 一只223317 的回复:
为什么接口类型之间可以进行强制类型转换?
举个例子来说,不然说不清楚、
nayi_224 2020-04-28
  • 打赏
  • 举报
回复
编译阶段可以随意强制转换,至于能否执行,要看继承关系
Integer str = (Integer)new Object();

62,626

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧