聚合全网技术文章,根据你的阅读喜好进行个性推荐
开源之夏第三届火热来袭,高校学生参与赢万元奖金!>>>
Java 17 sealed class 已经转正了,可是这个特性主要用于什么场景呢??
开这个特性,不如多重继承。我现在都管不住自己两个儿子,累死了。。
Java:你可以不用,但是我必须要有,叉腰。
限定子类,以后可用于模式匹配,与kotlin的密封类作用类似吧
sealed有一个非常有用的功能就是限定当前类为一个密封类无法被子类的方法所重写。
简单来讲就是你写了一个超类或基类里面封装了一些基础方法,别人可以用,但不想别人去重写这个方法。因为你的父类方法在没有sealed的情况无法避免被子类override重写。这时你可以将你的父类加上sealed前缀,将其声明为密封类,这样别人还是可以用,但无法通过重写来修改同样的方法名称。
打比方有A类func方法,B类继承了A类,并可以重写A类的func方法。C类使用B类就可以调用实际是A类的设计者设计的func方法。但如果B类重写了这个方法,那C类实际调用的是B重写的方法。这是A的设计者不愿见的事情,这时A的设计者想其它通过继承的类无法重写自己的func方法,这时就需要用到sealed方法,而这个特点在工作中非常常见!
举个现实中的例子,张三发表了一篇文章,李四可以通过继承拿来用,但这时李四把文章的内容改了(重写)还打着张三的名义,这时如果文章改得不好,李四没什么,张三就可能被骂,张三想通过方法只让别人引用自己原文,而不能修改这时就可以使用sealed。
六大设计原则通常指SOLID+迪米特法则,这其中非常重要的设计原则就是里氏替代原则,这个原则讲的是一个超类中的共用方法,不能被其它子类重写!在日常工作中,如果两个类都需要一个同样的方法,我们的做法可能会设计一个超类,这两个类都会继承这个类,但是如果说有一个子类重写了这个共有的方法,那这个子类在实现的时候得到的结果和超类的原有方法会不同。而这样就不符合里氏替代原则了,这时sealed类的密封原则阻止了子类override行为,就维护了里氏替代原则不会被违反。所以说sealed这个关键字的设计是有意义的!
开这个特性,不如多重继承。我现在都管不住自己两个儿子,累死了。。
Java:你可以不用,但是我必须要有,叉腰。
限定子类,以后可用于模式匹配,与kotlin的密封类作用类似吧
sealed有一个非常有用的功能就是限定当前类为一个密封类无法被子类的方法所重写。
简单来讲就是你写了一个超类或基类里面封装了一些基础方法,别人可以用,但不想别人去重写这个方法。因为你的父类方法在没有sealed的情况无法避免被子类override重写。这时你可以将你的父类加上sealed前缀,将其声明为密封类,这样别人还是可以用,但无法通过重写来修改同样的方法名称。
打比方有A类func方法,B类继承了A类,并可以重写A类的func方法。C类使用B类就可以调用实际是A类的设计者设计的func方法。但如果B类重写了这个方法,那C类实际调用的是B重写的方法。这是A的设计者不愿见的事情,这时A的设计者想其它通过继承的类无法重写自己的func方法,这时就需要用到sealed方法,而这个特点在工作中非常常见!
举个现实中的例子,张三发表了一篇文章,李四可以通过继承拿来用,但这时李四把文章的内容改了(重写)还打着张三的名义,这时如果文章改得不好,李四没什么,张三就可能被骂,张三想通过方法只让别人引用自己原文,而不能修改这时就可以使用sealed。
六大设计原则通常指SOLID+迪米特法则,这其中非常重要的设计原则就是里氏替代原则,这个原则讲的是一个超类中的共用方法,不能被其它子类重写!在日常工作中,如果两个类都需要一个同样的方法,我们的做法可能会设计一个超类,这两个类都会继承这个类,但是如果说有一个子类重写了这个共有的方法,那这个子类在实现的时候得到的结果和超类的原有方法会不同。而这样就不符合里氏替代原则了,这时sealed类的密封原则阻止了子类override行为,就维护了里氏替代原则不会被违反。所以说sealed这个关键字的设计是有意义的!