gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 06:57:00 24 4
gpt4 key购买 nike

我是 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com