可以考虑将此代码用于Java中的成员重写吗?

特雅斯·谢蒂(Tejas Shetty)

从理论上讲,Java不支持成员重写,因此我一直在考虑是否可以将此代码段用于重写类的成员。但是,我不太确定此代码在什么情况下可能会失败。我的意思是,如果这一切正常进行,那么它不会被忽视吗?这可能是一个愚蠢的问题,但我真的很想知道这段代码在我无法想到的不同情况下可能会做什么。因此,如果有人可以向我解释它,那将是非常不错的。谢谢!


    ClassA { 
        int i = 10; 
        void eat(){ 
            System.out.println(“ A类:进食”); 
        } 
        void bark(){ 
            System.out.println(“ In Class A:Barking”); 
        } 
    } 
    class ClassB扩展了ClassA { 
        // int i = 20; 
        ClassB(){ 
            super.i = 20; //更改A类中i的值。
        } 
        void eat(){ 
            System.out.println(“在B类中:进食”); 
        } 
            
    }
    公共类Main { 
        public static void main(String [] args){  
            ClassB b = new ClassB();
            System.out.println(bi);
            打 (); 
            b。树皮(); 
            ClassA ua =新的ClassB(); 
            System.out.println(ua.i); 
            ua.eat(); 
            ua.bark(); 
            ClassA a =新的ClassA(); 
            System.out.println(ai); 
        } 
    }

 
幽灵猫

我不太确定这段代码在什么情况下可能会失败。

它(在某种程度上)在人类读者/概念层面上是失败的

Java语言就是它。这意味着Java程序员知道期望什么,该做什么和不该做什么。

并且是继承的基本规则之一(在Java中,而且在一般情况下):您对超级类的字段非常谨慎。成员字段应被视为类的内部实现细节。您不会将其暴露给外部世界。除非有充分的理由,否则不要将其公开给子班。而且,如果您真的想在Java中执行此操作,则正确的方法是:protected对该字段使用关键字。

您的想法基本上是让子类“了解”超类字段,更糟糕的是:在创建时更改“内部状态”。

因此,在现实世界中,此类代码可能会迅速导致各种令人讨厌的惊喜。因为人们在现实世界中也不会想到,一个子类做这样的事情,因此,他们可能会在大型应用程序调试问题时真的惊讶地发现:“我应该是10,为什么20”。

长话短说:您可以做某事并不意味着您应该做。相反,好的编程就是以“标准”的方式做事,这不会令您的读者感到惊讶。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

可以将此代码重写为异步功能吗?

可以将此代码重写为更具Pythonic吗?

可以将此代码重构为更短的代码吗?

是否可以在Java8流中重写此类代码?

可以将此模板功能修改为考虑以下方法吗?

在Scala中重写Java公共成员

子类java中的“重写”超类成员

帮助将此Java代码块转换为Clojure吗?

如何在Java中编写用于添加List <object>的重写的代码?

注释可以用于代码注入吗?

java中的方法重写中,两个方法可以具有不同的返回类型吗?

您可以在Java中检测是否正在调试代码吗?

在Java中可以“反射地”访问方法的源代码吗?

在成员函数中,可以== NULL吗?

我们可以将重写的方法作为Java中的抽象方法吗?

模式匹配可以用于列表成员资格吗?

Android - 错误:无法弄清楚如何将此字段保存到数据库中。你可以考虑为它添加一个类型转换器吗?

logcat可以用于在Android中记录NDK代码吗?还是NDK的日志选项是什么?

如何将此Kotlin代码中的“应用”转换为Java?

jQuery对话框:我可以将此代码段称为构造函数吗?

可以将此代码进一步向量化以消除循环吗?

有人可以帮助我将此jQuery代码转换为JS吗?

在Java嵌套类中,封闭类可以访问内部类的私有成员吗?

检查Java代码中的密码(出于安全考虑)

Java可以继承子类并重写嵌套类吗?

Java可以在其他对象中调用父级重写方法,但不能在子类型中调用吗?

我可以在C ++中重写运算符吗?

我可以从Java代码中获得等效的点网代码吗

我可以从Java代码中获得等效的点网代码吗