{"id":6554,"date":"2024-04-21T23:55:07","date_gmt":"2024-04-22T06:55:07","guid":{"rendered":"https:\/\/zentut.com\/java-tutorial\/java-final-class\/"},"modified":"2024-04-21T23:55:32","modified_gmt":"2024-04-22T06:55:32","slug":"java-final-class","status":"publish","type":"page","link":"https:\/\/www.zentut.com\/java-tutorial\/java-final-class\/","title":{"rendered":"Java Final Class"},"content":{"rendered":"\n<p><strong>Summary<\/strong>: in this tutorial, you will learn about the Java final class and how to use it to define classes that cannot be inherited.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Introduction to Java final class<\/h2>\n\n\n\n<p>In Java, a final class cannot be <a href=\"https:\/\/zentut.com\/java-tutorial\/java-inheritance\/\">inherited<\/a>. When you define a <a href=\"https:\/\/zentut.com\/java-tutorial\/java-class\/\">class<\/a> as final, you&#8217;re stating that it is complete and should not be extended.<\/p>\n\n\n\n<p>In practice, you often use the final classes to encapsulate functionality that should remain unchanged.<\/p>\n\n\n\n<p>To create a final class in Java, you use the <code>final<\/code> keyword as follows:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-keyword\">final<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">MyFinalClass<\/span> <\/span>{\n    <span class=\"hljs-comment\">\/\/ Class members and methods<\/span>\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In this syntax, the <code>MyFinalClass<\/code> is final. If you attempt to extend it, you&#8217;ll get an error:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-comment\">\/\/ Error: Cannot inherit from final 'Calculator'<\/span>\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Subclass<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">MyFinalClass<\/span> <\/span>{\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Java final class example<\/h2>\n\n\n\n<p>The following example shows how to define the <code>Calculator<\/code> class as a final class:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-keyword\">final<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Calculator<\/span> <\/span>{\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">double<\/span> <span class=\"hljs-title\">add<\/span><span class=\"hljs-params\">(<span class=\"hljs-keyword\">double<\/span> a, <span class=\"hljs-keyword\">double<\/span> b)<\/span><\/span>{\n        <span class=\"hljs-keyword\">return<\/span> a + b;\n    }\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">double<\/span> <span class=\"hljs-title\">subtract<\/span><span class=\"hljs-params\">(<span class=\"hljs-keyword\">double<\/span> a, <span class=\"hljs-keyword\">double<\/span> b)<\/span><\/span>{\n        <span class=\"hljs-keyword\">return<\/span> a - b;\n    }\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">double<\/span> <span class=\"hljs-title\">divide<\/span><span class=\"hljs-params\">(<span class=\"hljs-keyword\">double<\/span> a, <span class=\"hljs-keyword\">double<\/span> b)<\/span><\/span>{\n        <span class=\"hljs-keyword\">return<\/span> a \/ b;\n    }\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">double<\/span> <span class=\"hljs-title\">multiply<\/span><span class=\"hljs-params\">(<span class=\"hljs-keyword\">double<\/span> a, <span class=\"hljs-keyword\">double<\/span> b)<\/span><\/span>{\n        <span class=\"hljs-keyword\">return<\/span> a * b;\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>The <code>Calculator<\/code> class contains four static methods that perform basic mathematical operations including addition, subtraction, multiplication, and division. <\/p>\n\n\n\n<p>You can use the final <code>Calculator<\/code> class throughout your application without the risk of accidentally extending it or modifying its behavior.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Java final class use cases<\/h2>\n\n\n\n<p>You use final classes when you want to ensure a certain classes of your codebase remain unchanged.<\/p>\n\n\n\n<p>Here are some common use cases of the final classes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Utility Classes<\/strong>: Classes that contain static utility methods often make good final classes because the utility methods should not be extended.<\/li>\n\n\n\n<li><strong>Immutable Classes<\/strong>: Classes representing immutable objects (objects whose state cannot be changed after creation) are often declared as final to guarantee their immutability.<\/li>\n\n\n\n<li><strong>Security<\/strong>: Final classes can be used to prevent tampering with critical code in security-sensitive applications.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Final classes in Java SE<\/h2>\n\n\n\n<p>Java standard library has many built-in final classes. These classes cannot be extended because if you do so,  their intended use would now make sense.<\/p>\n\n\n\n<p>For example, the String (<code>java.lang<\/code>.String) is a final class because the string is immutable. Therefore, you cannot make an extended version of the String class via inheritance like this:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-comment\">\/\/ error<\/span>\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">MyString<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">String<\/span> <\/span>{\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Another example of a utility class, which is a final class, is the Math class (<code>java.lang<\/code>.Math). The Math class provides a static method for performing mathematical operations is a final class:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">final<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Math<\/span> <\/span>{\n <span class=\"hljs-comment\">\/\/ ...<\/span>\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Summary<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Define a class as final if you don&#8217;t want it to be extended.<\/li>\n\n\n\n<li>Use Java final classes for utility or immutable classes.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Summary: in this tutorial, you will learn about the Java final class and how to use it to define classes that cannot be inherited. Introduction to Java final class In Java, a final class cannot be inherited. When you define a class as final, you&#8217;re stating that it is complete and should not be extended. [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":2190,"menu_order":37,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-6554","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.zentut.com\/wp-json\/wp\/v2\/pages\/6554","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.zentut.com\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.zentut.com\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.zentut.com\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.zentut.com\/wp-json\/wp\/v2\/comments?post=6554"}],"version-history":[{"count":2,"href":"https:\/\/www.zentut.com\/wp-json\/wp\/v2\/pages\/6554\/revisions"}],"predecessor-version":[{"id":6556,"href":"https:\/\/www.zentut.com\/wp-json\/wp\/v2\/pages\/6554\/revisions\/6556"}],"up":[{"embeddable":true,"href":"https:\/\/www.zentut.com\/wp-json\/wp\/v2\/pages\/2190"}],"wp:attachment":[{"href":"https:\/\/www.zentut.com\/wp-json\/wp\/v2\/media?parent=6554"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}