关于java中任意对象强制转换为接口类型的问题

  java中任意对象强转为接口类型都不会有编译错误

public class Apple implements Eatable{
    public static void main(String args[]) {
        Drinkable drinkable = (Drinkable)new Apple();
    }
}
interface Eatable{}
interface Drinkable{}

  java中的类可以多实现接口,Java编译器无法判断该类是否实现了该接口所以不会有编译错误。

  但是Java中某个类的向上强转为另外一个类,若该类不是其父类,则会报编译错误,原因在于java中的类是单一继承的,编译器可对其进行判断。

public class Apple extends Eatable{
    public static void main(String args[]) {
        Drinkable drinkable = (Drinkable)new Apple();  报错 inconvertible types: can not cast Apple to Drinkable
    }
}
class Eatable{}
class Drinkable{}
时间: 2024-12-25 17:22:48

关于java中任意对象强制转换为接口类型的问题的相关文章

无法将类型为“Microsoft.Office.Interop.Word.ApplicationClass”的 COM 对象强制转换为接口类型“Microsoft.Office.Interop.Word._Application”。

无法将类型为“Microsoft.Office.Interop.Word.ApplicationClass”的 COM 对象强制转换为接口类型“Microsoft.Office.Interop.Word._Application”.此操作失败的原因是对 IID 为“{00020970-0000-0000-C000-000000000046}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 加载类型库/DLL 时出错. (异常来自 HRESULT:0x80029C4A

无法将类型为“System.__ComObject”的 COM 对象强制转换为接口类型,原因为没有注册类

错误描述 e = {"无法将类型为"System.__ComObject"的 COM 对象强制转换为接口类型"OpcRcw.Da.IOPCServer".此操作失败的原因是对 IID 为"{39C13A4D-011E-11D0-9675-0020AFD8ADB3}"的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOT

C#WPF无法将类型为“System.__ComObject”的 COM 对象强制转换为接口类型“System.Speech.Internal.SapiInterop.ISpDataKey”。解决办法

this.speecher.SpeakAsync(textToSpeak); // 报错 无法将类型为"System.__ComObject"的 COM 对象强制转换为接口类型"System.Speech.Internal.SapiInterop.ISpDataKey".此操作失败的原因是对 IID 为"{14056581-E16C-11D2-BB90-00C04F8EE6C0}"的接口的 COM 组件调用 QueryInterface 因以下错

System.InvalidCastException: 无法将类型为“Microsoft.Office.Interop.Word.ApplicationClass”的 COM 对象强制转换为接口类型“Microsoft.Office.Interop.Word._Application”。

报错:System.InvalidCastException: 无法将类型为“Microsoft.Office.Interop.Word.ApplicationClass”的 COM 对象强制转换为接口类型“Microsoft.Office.Interop.Word._Application”.此操作失败的原因是对 IID 为“{00020970-0000-0000-C000-000000000046}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 加载类型库/D

无法将类型为“Shell32.ShellClass”的 COM 对象强制转换为接口类型“Shell32.IShellDispatch 6”

今天想研究一下mp3 然后在输出mp3长度的时候用了如下代码(网上搬得): string file = "D:\\AccountDaemon\\My Music\\MyMusics\\Luxtos.mp3"; ShellClass sh = new ShellClass(); Folder dir = sh.NameSpace(Path.GetDirectoryName(file)); FolderItem item = dir.ParseName(Path.GetFileName(f

无法将类型为“Excel.ApplicationClass”的 COM 对象强制转换为接口类 型“Excel._Application”。此操作失败的原因是对 IID 为“{000208D5 -0000-0000-C000-000000000046}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 加载类型库/DLL 时出错。 (异常来 自 HRESULT:

无法将类型为“Excel.ApplicationClass”的 COM 对象强制转换为接口类 型“Excel._Application”.此操作失败的原因是对 IID 为“{000208D5 -0000-0000-C000-000000000046}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 加载类型库/DLL 时出错. (异常来 自 HRESULT:0x80029C4A (TYPE_E_CANTLOADLIBRARY)) 经过多般折腾,还是没什么更好的办法.

无法将类型为excel.applicationclass的com 强制转换为接口类型的解决方法[转]

c#解决方案EXCEL 导出 今天碰到客户的电脑在导出EXCEL的时候提示,无法将类型为 excel.applicationclass 的 com 强制转换为接口类型 excel._application 的问题 最后用下面的方法解决,最主要的就是这句话: “C:\Program Files\Microsoft Office\OFFICE11\excel.exe” /regserver 客户电脑的故障是原先导出正常,后来突然不能导出了,事后估计是因为安装了WPS的原因,导致相应的组件冲突. 中间

利用反射创建实例强制转换为接口失败小结

最近码代码是遇到一个很奇怪的问题,利用反射创建实例对象后强制转换为接口类型时抛出异常 然后看了下类的继承关系 没有问题,查看代码用 m_queryImplementAssembly = Assembly.Load(m_queryImplementAssemblyName); m_queryImplementAssembly.CreateInstance(strInstanceName);也不应该会出问题, 后来换了一种方式Activator.CreateInstance仍然无果.就这样纠结了一天

【学习笔记】Java中生成对象的5中方法

概述:本文介绍以下java五种创建对象的方式: 1.用new语句创建对象,这是最常用的创建对象的方式. 2.使用Class类的newInstance方法 3.运用反射手段,调用java.lang.reflect.Constructor类的newInstance()实例方法. 4.调用对象的clone()方法. 5.运用反序列化手段,调用java.io.ObjectInputStream对象的readObject()方法. 一.使用new关键字 这是最常见也是最简单的创建对象的方式了.通过这种方式