Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中多次重写布尔返回函数是最佳做法吗;公共布尔方法F1();_Java_Android - Fatal编程技术网

在java中多次重写布尔返回函数是最佳做法吗;公共布尔方法F1();

在java中多次重写布尔返回函数是最佳做法吗;公共布尔方法F1();,java,android,Java,Android,重写布尔返回方法是一种好的做法,它的主体在类A中,可以在子类B和C中重写,以便根据类B、C进行更多的更改 语言是Java,Android 请对此提出建议 class A { public boolean check(String arg1,String arg2){ /* * Some code is here. * */ return true; } } class B extends A{ @Ov

重写布尔返回方法是一种好的做法,它的主体在类A中,可以在子类B和C中重写,以便根据类B、C进行更多的更改

语言是Java,Android

请对此提出建议

class A {
    public boolean check(String arg1,String arg2){

        /*
        * Some code is here.
        * */

        return true;
    }
}

class B extends A{

    @Override
    public boolean check(String arg1, String arg2) {
         super.check(arg1, arg2);
         /*
         * Made come code change according to class B
         * */

         return true;

    }
}

class C extends A{

    @Override
    public boolean check(String arg1, String arg2) {
        super.check(arg1, arg2);
        /*
         * Made come code change according to class C
         * */

        return true;

    }
}
我最后的评论“是一个答案。”

C类
的一个非常常见的场景可能如下所示:

if (super.check(arg1, arg2)) {    
  ... do something ... test something
  ... return True or False ... 
} 
else return false;  // "what the parent said..."

每个子类中的
check()
方法首先调用其父类的版本。如果该方法返回
false
,那么(比如…)子对象也会返回。但是如果父母返回
true
,那么(比如…)孩子会做更多的事情,自己决定返回什么。因此,我们可以说,孩子详细阐述了父母所做的事情。“所有这些方法都执行基本检查,但子方法做得更多。”

如果您希望方法的行为与其父方法不同,可以覆盖这些方法,但调用
super
并不总是必要的,这取决于您是否要扩展或更改该行为

考虑以下类,其中我们检查两个参数的长度是否小于5:

public class Checker {
    public boolean check(String arg1, String arg2) {
        return arg1.length() < 5 && arg2.length() < 5;
    }
}
或者您可以将行为更改为仅检查两个参数是否都以“Bop”开头,您可以这样做,忽略父级的check()方法:


check
方法是否总是返回true?如果是,为什么它会返回任何东西?它可能有一个无效的返回类型。我不明白。你是否在问如果你有不同的逻辑,你是否应该重写这个方法?对这就是重点。如果每个类的检查都有自己的逻辑,那么重写该方法是可以的。但是在每个子类中调用super.check(arg1,arg2)是错误的。我真的不理解这个问题。“如果一个函数需要返回一些东西,就这样吧。”当调用
check()
方法时,这三个函数中的一个将成为所调用的函数。“每个人都应该做正确的事情。”不管怎样,这里都没有“最佳实践”的问题,IMHO。@MarcosEchagüe同意。除非在
super.check
中执行某种CRUD操作,例如修改数据库中的某些内容,否则如果结果被丢弃,调用
super
是没有意义的。
class StartWithBapChecker extends Checker {

    @Override
    public boolean check(String arg1, String arg2) {
        boolean correctLength = super.check(arg1, arg2);

        return correctLength &&
                arg1.startsWith("Bap") &&
                arg2.startsWith("Bap");
    }
}
class StartWithBopChecker extends Checker {

    @Override
    public boolean check(String arg1, String arg2) {
        return arg1.startsWith("Bop") &&
                arg2.startsWith("Bop");
    }
}