java - 类继承和类型转换

标签 java inheritance object methods casting

因此,我在一个包含零碎内容的文件夹中得到了这段代码,这些代码将用于一个项目,该项目已停止开发。然而,作为 Java 新手,我有几个问题(我知道代码无法编译,但这解决了我的问题之一)。

interface Executable { 
   public int execute (Object o); 
} 

public class Biv implements Executable { 

   public int execute (String s) { 
     System.out.println (s); 
     return s.length(); 
   } 

   public static void main (String[] args) { 
     Executable e = new Biv(); 
     System.out.println( 
         e.execute ("Hello World!")); 
   }


}

1) 我的第一个问题与变量 e 有关。它是用 Executable 对象类型声明的,但是我不明白为什么它可以用新的 Biv 对象实例化。这是怎么回事,这意味着什么?

2) 错误出现在 Biv 类中的执行方法中。这似乎是因为它需要一个对象而不是字符串。但是,不能因为 String 是 Object 的子类,就不能用 String 替换 Object 吗?我可以理解,如果您用 Object 替换 String ,它会出现错误(我认为),但不知道当前是如何完成的。

最佳答案

I don't understand why it can then be instantiated with a new Biv object

因为 Biv 实现了 Executable,所以 Biv 的任何实例也是 Executable 的实例。

The error is in the execute method within the Biv class

是的,它 [Biv] 没有实现 execute(Object)。方法 execute(String) 只是一个碰巧具有相同名称的不同方法,因为它们没有相同的签名。任何实现Executable接口(interface)的类都必须重写execute(Object)方法。

没有co-variance java中重写方法的参数,因为它是不安全的。如果调用e.execute(new Object())会怎样? [其中 e 引用 Biv 对象] Biv 将不知道如何处理它。

关于java - 类继承和类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10067428/

相关文章:

java - 如何使用 FTPClient 设置 FTP 的工作目录

c++ - 虚拟和非虚拟继承的混合

python - 对称字典,其中 d[a][b] == d[b][a]

javascript - 从嵌套的 Javascript 对象中提取和合并数组

javascript - 将 {Object} 的嵌套 [Array] 转换为 > {Object} | JSON文件

java - 标准查询 ORDER BY 产生错误。这是 SQL-SERVER 的限制吗?如何在复杂的条件查询上正确排序?

java - Java 中 Windows 的行分隔符

C# 访问方法重定向

java - 在 Google Glass 上部署玻璃器皿

java - 具有不同参数列表的继承