{"id":6551,"date":"2024-04-21T23:54:04","date_gmt":"2024-04-22T06:54:04","guid":{"rendered":"https:\/\/zentut.com\/java-tutorial\/java-inheritance\/"},"modified":"2024-04-21T23:54:32","modified_gmt":"2024-04-22T06:54:32","slug":"java-inheritance","status":"publish","type":"page","link":"https:\/\/www.zentut.com\/java-tutorial\/java-inheritance\/","title":{"rendered":"Java Inheritance"},"content":{"rendered":"\n<p><strong>Summary<\/strong>: in this tutorial, you will learn about Java inheritance and how to utilize it to create a class that inherits the fields and methods from an existing class.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Introduction to Java inheritance<\/h2>\n\n\n\n<p>Inheritance allows you to define a <a href=\"https:\/\/zentut.com\/java-tutorial\/java-class\/\">new class<\/a> based on an existing class. The new class will inherit the fields and methods of the existing class. <\/p>\n\n\n\n<p>To define a class that inherits from an existing class, you use the <code>extends<\/code> keyword:<\/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-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Superclass<\/span><\/span>{\n   <span class=\"hljs-comment\">\/\/ ...<\/span>\n}\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\">Superclass<\/span> <\/span>{\n  <span class=\"hljs-comment\">\/\/ ...<\/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 subclass inherits the fields and method of the superclass. The subclass may also have its own fields and methods.<\/p>\n\n\n\n<p>The subclass and superclass are also known as the derived class and base class respectively.<\/p>\n\n\n\n<p>The relationship between the subclass and superclass is an &#8220;is-a&#8221; relationship.<\/p>\n\n\n\n<p>Java allows a class to inherit from a single class, which is referenced to as a <strong>single inheritance<\/strong>. It doesn&#8217;t support <strong>multiple inheritance<\/strong>, where a class can inherit from multiple classes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Java inheritance example<\/h2>\n\n\n\n<p>Suppose you have an existing class called <code>Person<\/code> as follows:<\/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\">\/\/ Person.java<\/span>\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Person<\/span> <\/span>{\n    <span class=\"hljs-keyword\">public<\/span> String name;\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> String <span class=\"hljs-title\">sayHi<\/span><span class=\"hljs-params\">()<\/span> <\/span>{\n        <span class=\"hljs-keyword\">return<\/span> String.format(<span class=\"hljs-string\">\"Hi, I'm %s. \"<\/span>, name);\n    }\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<p>The Person class has a <a href=\"https:\/\/zentut.com\/java-tutorial\/java-public-private\/\">public<\/a> field <code>name<\/code> and a method <code>sayHi()<\/code>. <\/p>\n\n\n\n<p>The following shows how to define an <code>Employee<\/code> class that extends the <code>Person<\/code> 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-comment\">\/\/ Employee.java<\/span>\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Employee<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">Person<\/span> <\/span>{\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>Because the <code>Employee<\/code> class inherits from the <code>Person<\/code> class, it is a <code>Person<\/code> class. It means that you can use the <code>Employee<\/code> class like a <code>Person<\/code> class. <\/p>\n\n\n\n<p>For example, you can create a new <code>Employee<\/code> object, set the name, and call the <code>sayHi<\/code> method:<\/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\">\/\/ App.java<\/span>\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">App<\/span> <\/span>{\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">main<\/span><span class=\"hljs-params\">(String&#91;] args)<\/span> <\/span>{\n        <span class=\"hljs-keyword\">var<\/span> e = <span class=\"hljs-keyword\">new<\/span> Employee();\n        e.name = <span class=\"hljs-string\">\"John\"<\/span>;\n        System.out.println(e.sayHi());\n    }\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>Output:<\/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\">Hi, I<span class=\"hljs-string\">'m John.<\/span><\/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<p>In this example, the <code>Employee<\/code> class doesn&#8217;t contain any specific code. But it can reuse the code from the <code>Person<\/code> class. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">protected access modifier<\/h2>\n\n\n\n<p>In the <code>Person<\/code> class, the name field is a public field that can be accessible from any part of the application including the <code>Employee<\/code> class.<\/p>\n\n\n\n<p>The following changes the access modifier of the <code>name<\/code> field from <code>public<\/code> to <code>private<\/code>:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Person<\/span> <\/span>{\n    <span class=\"hljs-keyword\">private<\/span> String name;\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> String <span class=\"hljs-title\">sayHi<\/span><span class=\"hljs-params\">()<\/span> <\/span>{\n        <span class=\"hljs-keyword\">return<\/span> String.format(<span class=\"hljs-string\">\"Hi, I'm %s. \"<\/span>, name);\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><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>Because of the <code>private<\/code> access modifier, the <code>name<\/code> field is not accessible outside of the <code>Person<\/code> class anymore. Therefore, the following code will not compile:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" 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-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">App<\/span> <\/span>{\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">main<\/span><span class=\"hljs-params\">(String&#91;] args)<\/span> <\/span>{\n        <span class=\"hljs-keyword\">var<\/span> e = <span class=\"hljs-keyword\">new<\/span> Employee();\n        e.name = <span class=\"hljs-string\">\"John\"<\/span>; <span class=\"hljs-comment\">\/\/ error<\/span>\n        System.out.println(e.sayHi());\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><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>To allow a subclass to access the fields and methods of the superclass, you need to use the <code>protected<\/code> access modifier.<\/p>\n\n\n\n<p>For example, the following changes the access modifier of the <code>name<\/code> field in the <code>Person<\/code> class to <code>protected<\/code>:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Person<\/span> <\/span>{\n    <span class=\"hljs-keyword\">protected<\/span> String name;\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">sayHi<\/span><span class=\"hljs-params\">()<\/span> <\/span>{\n        <span class=\"hljs-keyword\">return<\/span> String.format(<span class=\"hljs-string\">\"Hi, I'm %s. \"<\/span>, name);\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><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>Now, the <code>Employee<\/code> class can access the <code>name<\/code> field.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Adding fields to subclass<\/h2>\n\n\n\n<p>Besides fields and methods inherited from the <code>Person<\/code> class, the <code>Employee<\/code> class can have its own fields and methods.<\/p>\n\n\n\n<p>For example, the following add the job title field to the <code>Employee<\/code> class:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Employee<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">Person<\/span> <\/span>{\n    <span class=\"hljs-keyword\">public<\/span> String jobTitle;\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><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>Employee<\/code> class now has two fields: <\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>name<\/code>: This field is inherited from the <code>Person<\/code> class.<\/li>\n\n\n\n<li><code>jobTitle<\/code>: This is its own field.<\/li>\n<\/ul>\n\n\n\n<p>The following shows how to create an instance of the <code>Employee<\/code> class, assign values to the <code>name<\/code> and <code>jobTitle<\/code> fields, and call the <code>sayHi()<\/code> method:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-10\" 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-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">App<\/span> <\/span>{\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">main<\/span><span class=\"hljs-params\">(String&#91;] args)<\/span> <\/span>{\n        <span class=\"hljs-keyword\">var<\/span> e = <span class=\"hljs-keyword\">new<\/span> Employee();\n        e.name = <span class=\"hljs-string\">\"John\"<\/span>;\n        e.jobTitle = <span class=\"hljs-string\">\"Java Developer\"<\/span>;\n        System.out.println(e.sayHi());\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-10\"><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>Output:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-11\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\">Hi, I<span class=\"hljs-string\">'m John.<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-11\"><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>sayHi()<\/code> method shows only the name. What if we want to display the job title? To do that we can override the <code>sayHi()<\/code> method in the <code>Employee<\/code> class.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Overriding methods<\/h2>\n\n\n\n<p>Method overriding allows a subclass to provide a specific implementation for a method defined in its superclass. <\/p>\n\n\n\n<p>To override a method, you use the same method signature of the method in the superclass.<\/p>\n\n\n\n<p>For example, the following illustrates how to define the <code>sayHi()<\/code> method in the <code>Employee<\/code> class that overrides the <code>sayHi()<\/code> method in the <code>Person<\/code> class:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-12\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Employee<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">Person<\/span> <\/span>{\n    <span class=\"hljs-keyword\">public<\/span> String jobTitle;\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> String <span class=\"hljs-title\">sayHi<\/span><span class=\"hljs-params\">()<\/span> <\/span>{\n        <span class=\"hljs-keyword\">return<\/span> String.format(<span class=\"hljs-string\">\"Hi, I'm %s. I'm a %s.\"<\/span>,\n                name,\n                jobTitle\n        );\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-12\"><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>If you call the <code>sayHi()<\/code> method using the <code>Employee<\/code> object, the <code>sayHi()<\/code> method in the <code>Employee<\/code> class will execute instead of the one defined in the <code>Person<\/code> class:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-13\" 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-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">App<\/span> <\/span>{\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">main<\/span><span class=\"hljs-params\">(String&#91;] args)<\/span> <\/span>{\n        <span class=\"hljs-keyword\">var<\/span> e = <span class=\"hljs-keyword\">new<\/span> Employee();\n        e.name = <span class=\"hljs-string\">\"John\"<\/span>;\n        e.jobTitle = <span class=\"hljs-string\">\"Java Developer\"<\/span>;\n\n        System.out.println(e.sayHi());\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-13\"><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>Output:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-14\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\">Hi, I<span class=\"hljs-string\">'m John. I'<\/span>m a Java Developer.<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-14\"><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>When overriding a method, you use the <code>@Override<\/code> annotation to explicitly tell the Java compiler your intent:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-15\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Employee<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">Person<\/span> <\/span>{\n    <span class=\"hljs-keyword\">public<\/span> String jobTitle;\n\n    <span class=\"hljs-meta\">@Override<\/span>\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> String <span class=\"hljs-title\">sayHi<\/span><span class=\"hljs-params\">()<\/span> <\/span>{\n        <span class=\"hljs-keyword\">return<\/span> String.format(\n                <span class=\"hljs-string\">\"%sI'm a %s.\"<\/span>,\n                <span class=\"hljs-keyword\">super<\/span>.sayHi(),\n                jobTitle\n        );\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-15\"><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 Java compiler will issue an error if you use <code>@Override<\/code> but use a different method signature from the parent class.<\/p>\n\n\n\n<p>For example, if you add a parameter to the <code>sayHi()<\/code> method and attempt to build it, you&#8217;ll get an error:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-16\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Employee<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">Person<\/span> <\/span>{\n    <span class=\"hljs-keyword\">public<\/span> String jobTitle;\n\n    <span class=\"hljs-meta\">@Override<\/span>\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> String <span class=\"hljs-title\">sayHi<\/span><span class=\"hljs-params\">(<span class=\"hljs-keyword\">int<\/span> volume)<\/span> <\/span>{\n        <span class=\"hljs-keyword\">return<\/span> String.format(\n                <span class=\"hljs-string\">\"%sI'm a %s.\"<\/span>,\n                <span class=\"hljs-keyword\">super<\/span>.sayHi(),\n                jobTitle\n        );\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-16\"><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>Error:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-17\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\">java: method does not override or implement a method from a supertype<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-17\"><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 super keyword<\/h2>\n\n\n\n<p>The <code>super<\/code> keyword allows you to access the members of the superclass within the subclass.<\/p>\n\n\n\n<p>You can use the <code>super<\/code> keyword to access superclass fields, call the superclass methods, or invoke the superclass constructors.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Calling superclass method<\/h3>\n\n\n\n<p>For example, the following shows how to use the super keyword to call the <code>sayHi()<\/code> method of the <code>Person<\/code> class in the <code>sayHi()<\/code> method of the <code>Employee<\/code> class:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-18\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Employee<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">Person<\/span> <\/span>{\n    <span class=\"hljs-keyword\">private<\/span> String jobTitle;\n\n    <span class=\"hljs-meta\">@Override<\/span>\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> String <span class=\"hljs-title\">sayHi<\/span><span class=\"hljs-params\">()<\/span> <\/span>{\n        <span class=\"hljs-keyword\">return<\/span> String.format(\n                <span class=\"hljs-string\">\"%sI'm a %s.\"<\/span>,\n                <span class=\"hljs-keyword\">super<\/span>.sayHi(),\n                jobTitle\n        );\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-18\"><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 program shows the same output as before. But the <code>sayHi()<\/code> method in the <code>Employee<\/code> can reuse the logic implemented by the <code>sayHi()<\/code> method of the <code>Person<\/code> class.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Invoking the superclass constructor<\/h3>\n\n\n\n<p>When you define a subclass, it automatically inherits all the constructors of the superclass. To call a constructor of a superclass, you use the <code>super()<\/code> keyword. For example:<\/p>\n\n\n\n<p>First, add a constructor that accepts a parameter name to the <code>Person<\/code> class:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-19\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Person<\/span> <\/span>{\n    <span class=\"hljs-keyword\">protected<\/span> String name;\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-title\">Person<\/span><span class=\"hljs-params\">(String name)<\/span><\/span>{\n        <span class=\"hljs-keyword\">this<\/span>.name = name;\n    }\n    \n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> String <span class=\"hljs-title\">sayHi<\/span><span class=\"hljs-params\">()<\/span> <\/span>{\n        <span class=\"hljs-keyword\">return<\/span> String.format(<span class=\"hljs-string\">\"Hi, I'm %s. \"<\/span>, name);\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-19\"><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>Second, change the <code>jobTitle<\/code> field in the <code>Employee<\/code> class to private and add a constructor to the <code>Employee<\/code> class that accepts two parameters <code>name<\/code> and <code>jobTitle<\/code>:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-20\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Employee<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">Person<\/span> <\/span>{\n    <span class=\"hljs-keyword\">private<\/span> String jobTitle;\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-title\">Employee<\/span><span class=\"hljs-params\">(String name, String jobTitle)<\/span> <\/span>{\n        <span class=\"hljs-keyword\">super<\/span>(name);\n        <span class=\"hljs-keyword\">this<\/span>.jobTitle = jobTitle;\n    }\n\n    <span class=\"hljs-meta\">@Override<\/span>\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> String <span class=\"hljs-title\">sayHi<\/span><span class=\"hljs-params\">()<\/span> <\/span>{\n        <span class=\"hljs-keyword\">return<\/span> String.format(\n                <span class=\"hljs-string\">\"%sI'm a %s.\"<\/span>,\n                <span class=\"hljs-keyword\">super<\/span>.sayHi(),\n                jobTitle\n        );\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-20\"><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 the <code>Employee<\/code> constructor, we use the <code>super<\/code> to call the <code>Person<\/code> constructor and assign the <code>jobTitle<\/code> argument to the <code>jobTitle<\/code> field.<\/p>\n\n\n\n<p>Third, modify the program to create a new instance of <code>Employee<\/code> using the <code>name<\/code> and <code>jobTitle<\/code> arguments:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-21\" 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-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">App<\/span> <\/span>{\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">main<\/span><span class=\"hljs-params\">(String&#91;] args)<\/span> <\/span>{\n        <span class=\"hljs-keyword\">var<\/span> e = <span class=\"hljs-keyword\">new<\/span> Employee(<span class=\"hljs-string\">\"John\"<\/span>, <span class=\"hljs-string\">\"Java Developer\"<\/span>);\n        System.out.println(e.sayHi());\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-21\"><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>Output:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-22\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\">Hi, I<span class=\"hljs-string\">'m John. I'<\/span>m a Java Developer<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-22\"><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>Java inheritance allows a subclass to inherit the properties and behaviors of a superclass.<\/li>\n\n\n\n<li>Use the <code>extends<\/code> keyword to define a subclass.<\/li>\n\n\n\n<li>Use the <code>protected<\/code> access modifier to allow the subclass to access fields and methods of the superclass.<\/li>\n\n\n\n<li>A subclass can override a method in the superclass by providing a specific implementation.<\/li>\n\n\n\n<li>Use the <code>super<\/code> keyword to access superclass fields, call superclass methods, or invoke superclass constructors in the subclass.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Summary: in this tutorial, you will learn about Java inheritance and how to utilize it to create a class that inherits the fields and methods from an existing class. Introduction to Java inheritance Inheritance allows you to define a new class based on an existing class. The new class will inherit the fields and methods [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":2190,"menu_order":36,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-6551","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.zentut.com\/wp-json\/wp\/v2\/pages\/6551","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=6551"}],"version-history":[{"count":2,"href":"https:\/\/www.zentut.com\/wp-json\/wp\/v2\/pages\/6551\/revisions"}],"predecessor-version":[{"id":6553,"href":"https:\/\/www.zentut.com\/wp-json\/wp\/v2\/pages\/6551\/revisions\/6553"}],"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=6551"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}