java - 面向对象Java : can return an child class to parent class?

标签 java oop extends

我是 OOP 的新手,所以我有一个关于类何时扩展另一个类的愚蠢问题。

这是我的例子:

public class Test {
    public Monitor getMonitor(){
        return new LCD();
    }

    class LCD extends Monitor {   NO-ERROR
    class LCD {                   ERROR at line `return new LCD` 
        //some other method or function not in Monitor Class. Example:
        boolean isSamsung;
        public LCD whatkindLCD(){           
        }       
    }
}

我对上面的代码有一个问题:因为 LCD 是从 Monitor 扩展的,并且 LCD 有一些 Monitor 没有的其他属性/方法。那么,LCDMonitor 的子级,对吧?

这意味着你试图把一个“大盒子”放到一个“小盒子”上。那么,为什么当我返回新的 LCD 时,Eclipse 不会像我只使用 class LCD { 时那样注意到错误。

谢谢:)

最佳答案

在第二种(错误)情况下,您忘记声明 LCD事实上确实延伸了Monitor 。您只是定义一个“正常”的独立类 - 因此 new LCD()不是 Monitor 的实例.

如果您声明 LCD,编译器应该会很高兴。像这样的类:

class LCD extends Monitor {
    //some other method or function not in Monitor Class. Example:
    boolean isSamsung;
    public LCD whatkindLCD(){           
    }       
}
<小时/>

编辑(回应评论): LCD 根本不是问题与 Monitor 相比,该类具有额外的属性/方法。将调用 getMonitor() 的代码,只关心它是否得到 Monitor返回 - 也就是说,具有 Monitor 的所有方法、属性和行为。 .

如果你有turnOffdisplayBitmap(int[][] data)您的 Monitor 上的方法类,然后是你的LCD类也会有这些方法。 LCD 的任何实例可以表现为 Monitor当需要时 - 这是 OO 语言中子类化的基本原则。所以每当有东西想要 Monitor ,你可以给它一个LCD ,或 CRT 的实例或SamsungLCD相反,如果您有这些,并且编译器可以确信正确的方法/属性将存在并且可以被调用。

(从技术上讲,如果您喜欢正式定义,则这就是 Liskov substitution principle,但您不需要如此详细地理解它。)

关于java - 面向对象Java : can return an child class to parent class?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9365310/

相关文章:

java - 如何在java中设置继承变量?

java - 覆盖一个 protected 方法,并尝试从父类(super class)中调用它

java - 如何在JAVA中处理字符串编码(linux操作系统)

Java,多线程应用程序,计算时工作主窗口

android - ClassCastException 类扩展了 android.location.Location

c# - 如何验证工厂方法?

javascript - OOP -executeSql 将结果返回到 var 中,它显示未定义

java - 使用泛型创建类时出现 "> expected"错误

java - 通过 Android 从 ble 设备发送和接收数据

c++ - 我怎样才能让一个类实现一个接口(interface)....(C++)