【问题标题】:How do I call the method in the sub-class in java?java中子类中的方法如何调用?
【发布时间】:2012-01-24 01:37:26
【问题描述】:

我有一些子类和一个基础。 Base 是movie,我想在子类Fiction 方法中调用该方法。 该方法将从称为(management.java)的其他方法调用。 Fiction 有自己的字段 typeOfmovie 以及 getter 和 setter 方法。 我想做的是,我想调用那个 getter 或 setter 方法。 但即使我像这样创作:

Movie m = new Fiction();

我不能从那里调用 getter 或 setter 方法。 唯一的方法是我应该在 movie 类中创建抽象方法? 我可以,但是随着字段数量越来越多,我认为基类可能会变得混乱。

这是我唯一能做的吗?

此外,该字段是包私有的(默认),但我仍然无法以这种方式访问 能给我一个建议吗?

谢谢

【问题讨论】:

    标签: java


    【解决方案1】:

    您的声明说的 m 是 movie 类型,因此它只能调用在 Movie 中声明的方法(如果您的子类中覆盖了任何基类方法,则将执行覆盖的方法代码)。但是如果你想在子类中调用额外的方法。你必须像这样创建你的对象

    小说 f = new Fiction();

    【讨论】:

    • Fiction f = new Fiction(); 有什么区别?和电影 f = new Fiction() ?我可以问一下吗?
    • 小说 f -> f 是 f 类型的对象,电影 f -> f 是 M 类型的对象。从编译器的角度思考 你输入了 Movie m = new Fiction();此时编译器只知道 m 是 Movie 类型,还没有创建对象(仅在运行时创建对象),因此如果您尝试访问类 Movie 中不存在的方法,它不允许。话虽如此,我并不是说在创建对象后 m 可以访问 Fiction 方法,因为 m 是类型 movie 的对象。希望这会有所帮助
    【解决方案2】:

    您的两个选择是将方法放在Movie 上——这有你提到的缺点——或者将m 转换为Fiction

    Fiction f = (Fiction) m;
    f.typeOfMovie();
    

    但通常(并非总是)需要这样做表明您的代码没有以最面向对象的方式组织。如果没有上下文,很难知道情况是否如此。

    【讨论】:

      【解决方案3】:

      如果需要使用派生类的成员,则应将该字段声明为派生类的实例。

      【讨论】:

        猜你喜欢
        • 2020-07-15
        • 1970-01-01
        • 2011-02-11
        • 1970-01-01
        • 2019-05-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-13
        相关资源
        最近更新 更多