{"id":447,"date":"2021-01-06T20:18:40","date_gmt":"2021-01-06T20:18:40","guid":{"rendered":"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/?page_id=447"},"modified":"2021-01-09T22:10:10","modified_gmt":"2021-01-09T22:10:10","slug":"superclasses-subclasses","status":"publish","type":"page","link":"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/course-topics\/inheritance-polymorphism\/superclasses-subclasses\/","title":{"rendered":"Superclasses &#038; Subclasses"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_83 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<label for=\"ez-toc-cssicon-toggle-item-6a06f60eaa68f\" class=\"ez-toc-cssicon-toggle-label\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/label><input type=\"checkbox\"  id=\"ez-toc-cssicon-toggle-item-6a06f60eaa68f\"  aria-label=\"Toggle\" \/><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/course-topics\/inheritance-polymorphism\/superclasses-subclasses\/#Terminology\" >Terminology<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/course-topics\/inheritance-polymorphism\/superclasses-subclasses\/#An_Example\" >An Example<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/course-topics\/inheritance-polymorphism\/superclasses-subclasses\/#Employee_Class\" >Employee Class<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/course-topics\/inheritance-polymorphism\/superclasses-subclasses\/#Manager_Class\" >Manager Class<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/course-topics\/inheritance-polymorphism\/superclasses-subclasses\/#Everybody_gets_a_raise\" >Everybody gets a raise!<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/course-topics\/inheritance-polymorphism\/superclasses-subclasses\/#Points_to_Notice\" >Points to Notice<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Terminology\"><\/span>Terminology<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>The class which is&nbsp;<em><strong>inherited<\/strong> (or <strong>derived<\/strong>) from&nbsp;<\/em>is called the:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p><em><strong>superclass<\/strong><\/em>&nbsp;(Java)<\/p><p><em><strong>base class<\/strong><\/em>&nbsp;(C++)<\/p><p><em><strong>parent class<\/strong><\/em>&nbsp;or&nbsp;<em><strong>ancestor class<\/strong><\/em><\/p><\/blockquote>\n\n\n\n<p>The class which&nbsp;<em><strong>inherits<\/strong><\/em>&nbsp;is called a:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p><em><strong>subclass<\/strong><\/em>&nbsp;(Java)<\/p><p><em><strong>derived class<\/strong><\/em>&nbsp;(C++)<\/p><p><em><strong>child class<\/strong><\/em>&nbsp;or&nbsp;<em><strong>descendant class<\/strong><\/em><\/p><\/blockquote>\n\n\n\n<p>Note that the terms&nbsp;<em><strong>subclass<\/strong><\/em>&nbsp;and&nbsp;<strong><em>superclass<\/em>&nbsp;<\/strong>can be confusing!<\/p>\n\n\n\n<p class=\"has-text-align-center\"><strong>Superclass<\/strong><\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img fetchpriority=\"high\" decoding=\"async\" width=\"476\" height=\"343\" src=\"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/wp-content\/uploads\/2021\/01\/inhsub3.gif\" alt=\"\" class=\"wp-image-451\"\/><\/figure><\/div>\n\n\n\n<p class=\"has-text-align-center\"><strong>Subclasses<\/strong><\/p>\n\n\n\n<p>Can you understand why?<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"An_Example\"><\/span>An Example<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Here&#8217;s an example involving Employees and Managers.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Employee_Class\"><\/span>Employee Class<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>Consider the class&nbsp;<strong>Employee<\/strong>:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: java; auto-links: false; highlight: [17,18,19,20]; title: ; quick-code: false; notranslate\" title=\"\">\npackage company;\n\nimport java.util.Date;\n\npublic class Employee\n{\n    \/\/ Constructor\n    public Employee(String n, double s, Date d)\n    {\n        m_name = n;\n        m_salary = s;\n        m_hireDate = d;\n    }\n\n    \/\/ Instance methods\n\n    public void raiseSalary(double byPercent)\n    {\n        m_salary *= 1 + byPercent\/100;\n    }\n\n    public int getHireYear()\n    {\n        return m_hireDate.getYear() + 1900;\n    }\n\n    public void print()\n    {\n        System.out.println(m_name + &quot; &quot; +\n                           m_salary + &quot; &quot; +\n                           getHireYear());\n    }\n\n    public String getName()\n    {\n        return m_name;\n    }\n\n    \/\/\/\/\/\/\/\/\/\/\/\/ Private Data \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\n    private String\tm_name;\n    private double\tm_salary;\n    private Date\tm_hireDate;\n}\n<\/pre><\/div>\n\n\n<p>Now, imagine that you want to give all&nbsp;<strong>Employee<\/strong>s a raise:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: java; auto-links: false; highlight: [21]; title: ; quick-code: false; notranslate\" title=\"\">\npackage company;\n\nimport java.util.Date;\n\npublic class EmployeeTest\n{\n    public static void main(String&#x5B;] args)\n    {\n        Employee&#x5B;] staff = new Employee&#x5B;3];\n\n        staff&#x5B;0] = new Employee(&quot;Charlie Chaplin&quot;,\n                                34000,\n                                new Date(78, 7, 9));\n        staff&#x5B;1] = new Employee(&quot;Florence Nightingale&quot;,\n                                100,\n                                new Date(71, 4, 23));\n        staff&#x5B;2] = new Employee(&quot;Mother Theresa&quot;,\n                                0,\n                                new Date(89, 3, 5));\n        for (int i = 0; i &lt; staff.length; i++)\n            staff&#x5B;i].raiseSalary(5);     \/\/ by 5 percent\n        for (int i = 0; i &lt; staff.length; i++)\n            staff&#x5B;i].print();\n    }\n}\n<\/pre><\/div>\n\n\n<p>This produces the following output:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>Charlie Chaplin 35700.0 1978\nFlorence Nightingale 105.0 1971\nMother Theresa 0.0 1989<\/strong><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Manager_Class\"><\/span>Manager Class<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>However, you work for a company that gives raises to its managers differently from raises to its regular employees. (Don&#8217;t they all?)&nbsp; Furthermore, managers have access to a secretary and other perks.<\/p>\n\n\n\n<p>As the programmer for this company&#8217;s salary application, you naturally decide to use inheritance to model these differences. So you create a class&nbsp;<strong>Manager&nbsp;<\/strong>(a&nbsp;<em>subclass<\/em>&nbsp;of&nbsp;<strong>Employee&nbsp;<\/strong>&#8212; appropriate?):<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: java; auto-links: false; highlight: [14,15,16,17,18,19,20,21,23,24,25,26,27,28,29,30,31,32,33,34]; title: ; quick-code: false; notranslate\" title=\"\">\npackage company;\n\nimport java.util.Date;\n\npublic class Manager extends Employee\n{\n    public Manager(String n, double s, Date d,\n                   String secretaryName)\n    {\n        super(n, s, d);\n        m_secretaryName = secretaryName;\n    }\n\n    public void raiseSalary(double byPercent)\n    {\n        \/\/ Add 1\/2% bonus for every year of service\n        Date today = new Date();\n        double bonus =\n                0.5 * (today.getYear() + 1900 - getHireYear());\n        super.raiseSalary(byPercent + bonus);\n    }\n\n    public String getSecretaryName()\n    {\n        return m_secretaryName;\n    }\n\n    public void setSecretaryName(String name)\n    {\n        m_secretaryName = name;\n    }\n\n    \/\/\/\/\/\/\/\/\/\/\/\/ Data \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\n    private String\tm_secretaryName;\n}\n<\/pre><\/div>\n\n\n<p>Note that the Manager class&nbsp;<em>overrides<\/em>&nbsp;the&nbsp;<code><strong>raiseSalary(double byPercent)<\/strong><\/code>&nbsp;method, which recalculates the percentage raise and then calls its superclass&#8217;s (that is, the Employee class&#8217;s)&nbsp;<code><strong>raiseSalary<\/strong><\/code>&nbsp;method to complete the setting of the raise<\/p>\n\n\n\n<p>The <strong>Manager<\/strong> class also adds two secretary-related methods.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Everybody_gets_a_raise\"><\/span>Everybody gets a raise!<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>Now you can give all&nbsp;<strong>Employee<\/strong>s (including&nbsp;<strong>Manager<\/strong>s) a raise:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: java; auto-links: false; highlight: [17,18,19,20,21]; title: ; quick-code: false; notranslate\" title=\"\">\npackage company;\n\nimport java.util.Date;\n\npublic class ManagerTest\n{\n    public static void main(String&#x5B;] args)\n    {\n        Employee&#x5B;] staff = new Employee&#x5B;3];\n\n        staff&#x5B;0] = new Employee(&quot;Charlie Chaplin&quot;,\n                                34000,\n                                new Date(78, 7, 9));\n        staff&#x5B;1] = new Employee(&quot;Florence Nightingale&quot;,\n                                100,\n                                new Date(71, 4, 23));\n        staff&#x5B;2] = new Manager(&quot;Mother Theresa&quot;,\n                                120000,\n                                new Date(89, 3, 5),\n                                &quot;Demi Moore&quot; \/\/ Secretary name\n                                );\n\n        for (int i = 0; i &lt; staff.length; i++)\n            staff&#x5B;i].raiseSalary(5);     \/\/ by 5 percent\n\n        for (int i = 0; i &lt; staff.length; i++)\n            staff&#x5B;i].print();\n    }\n}\n<\/pre><\/div>\n\n\n<p>Note that we can write:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>staff[2] = new Manager(\"Mother Theresa\",\n                       120000,\n                       new Date(89, 3, 5),\n                       \"Demi Moore\" \/\/ Secretary name\n                       );<\/strong><\/pre>\n\n\n\n<p>even though staff[2] is of type Employee, because we declared the class Manager as extending from Employee &#8212; that is, a Manager is a kind of Employee.<strong><u>Question<\/u>:&nbsp;<\/strong>&nbsp;Would the following be legal\/valid?<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>Manager bill = new Employee(\"Bill Gates\",\n                            20000000.00,\n                            new Date(85, 1, 1));<\/strong><\/pre>\n\n\n\n<p>When the above program is run, it produces the following output:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>Charlie Chaplin 35700.0 1978\nFlorence Nightingale 105.0 1971\nMother Theresa 133800.0 1989<\/strong><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Points_to_Notice\"><\/span>Points to Notice<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>Here are some points of interest in this example:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>The keyword&nbsp;<strong>extends&nbsp;<\/strong>is used to specify that a class (<strong>Manager<\/strong>, in this case) is a&nbsp;<em><strong>subclass<\/strong><\/em>&nbsp;of another class (here,&nbsp;<strong>Employee<\/strong>), which is the&nbsp;<em><strong>superclass<\/strong><\/em>.<\/li><li>Class&nbsp;<strong>Manager&nbsp;<\/strong><em><strong>inherits<\/strong><\/em>&nbsp;all the data and methods of class&nbsp;<strong>Employee<\/strong><\/li><li>Class&nbsp;<strong>Manager&nbsp;<\/strong><em><strong>overrides<\/strong><\/em>&nbsp;the&nbsp;<strong>raiseSalary()<\/strong> method<ul><li>(Notice the distinction between&nbsp;<strong><em>override<\/em><\/strong>&nbsp;and&nbsp;<strong><em>overload<\/em><\/strong>.)<\/li><\/ul><\/li><\/ul>\n\n\n\n<ul class=\"wp-block-list\"><li>When we call the&nbsp;<strong>raiseSalary()<\/strong>method:<ul><li>The compiler does not know the proper method to invoke at compile time<ul><li>When the method&nbsp;<em>can<\/em>&nbsp;be determined at compile time, it is called&nbsp;<em><strong>compile-time binding<\/strong><\/em>)<\/li><\/ul><\/li><li>Instead, the compiler generates code that will dynamically determine the proper method to call at run time<ul><li>When the method is determined at run time, it is called&nbsp;<em><strong>dynamic binding<\/strong><\/em>,&nbsp;<em><strong>late binding<\/strong><\/em>, or&nbsp;<em><strong>run-time binding<\/strong><\/em>)<\/li><\/ul><\/li><\/ul><\/li><li>When we called the&nbsp;<strong>print()<\/strong>&nbsp;method, because we did not implement a&nbsp;<strong>print()<\/strong>&nbsp;method on&nbsp;<strong>Manager&nbsp;<\/strong>class, the dynamic binding code finds only the&nbsp;<strong>Employee.print()<\/strong>&nbsp;method, and so calls it.<\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Terminology The class which is&nbsp;inherited (or derived) from&nbsp;is called the: superclass&nbsp;(Java)base class&nbsp;(C++)parent class&nbsp;or&nbsp;ancestor class The class which&nbsp;inherits&nbsp;is called a: subclass&nbsp;(Java)derived class&nbsp;(C++)child class&nbsp;or&nbsp;descendant class Note that the terms&nbsp;subclass&nbsp;and&nbsp;superclass&nbsp;can be confusing! Superclass Subclasses Can you understand why? An Example Here&#8217;s an example involving Employees and Managers. Employee Class Consider the class&nbsp;Employee: Now, imagine that you want to [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":61,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_eb_attr":"","_uag_custom_page_level_css":"","ocean_post_layout":"left-sidebar","ocean_both_sidebars_style":"","ocean_both_sidebars_content_width":0,"ocean_both_sidebars_sidebars_width":0,"ocean_sidebar":"ocs-course-topics-sidebar","ocean_second_sidebar":"0","ocean_disable_margins":"enable","ocean_add_body_class":"","ocean_shortcode_before_top_bar":"","ocean_shortcode_after_top_bar":"","ocean_shortcode_before_header":"","ocean_shortcode_after_header":"","ocean_has_shortcode":"","ocean_shortcode_after_title":"","ocean_shortcode_before_footer_widgets":"","ocean_shortcode_after_footer_widgets":"","ocean_shortcode_before_footer_bottom":"","ocean_shortcode_after_footer_bottom":"","ocean_display_top_bar":"default","ocean_display_header":"default","ocean_header_style":"","ocean_center_header_left_menu":"0","ocean_custom_header_template":"0","ocean_custom_logo":0,"ocean_custom_retina_logo":0,"ocean_custom_logo_max_width":0,"ocean_custom_logo_tablet_max_width":0,"ocean_custom_logo_mobile_max_width":0,"ocean_custom_logo_max_height":0,"ocean_custom_logo_tablet_max_height":0,"ocean_custom_logo_mobile_max_height":0,"ocean_header_custom_menu":"0","ocean_menu_typo_font_family":"0","ocean_menu_typo_font_subset":"","ocean_menu_typo_font_size":0,"ocean_menu_typo_font_size_tablet":0,"ocean_menu_typo_font_size_mobile":0,"ocean_menu_typo_font_size_unit":"px","ocean_menu_typo_font_weight":"","ocean_menu_typo_font_weight_tablet":"","ocean_menu_typo_font_weight_mobile":"","ocean_menu_typo_transform":"","ocean_menu_typo_transform_tablet":"","ocean_menu_typo_transform_mobile":"","ocean_menu_typo_line_height":0,"ocean_menu_typo_line_height_tablet":0,"ocean_menu_typo_line_height_mobile":0,"ocean_menu_typo_line_height_unit":"","ocean_menu_typo_spacing":0,"ocean_menu_typo_spacing_tablet":0,"ocean_menu_typo_spacing_mobile":0,"ocean_menu_typo_spacing_unit":"","ocean_menu_link_color":"","ocean_menu_link_color_hover":"","ocean_menu_link_color_active":"","ocean_menu_link_background":"","ocean_menu_link_hover_background":"","ocean_menu_link_active_background":"","ocean_menu_social_links_bg":"","ocean_menu_social_hover_links_bg":"","ocean_menu_social_links_color":"","ocean_menu_social_hover_links_color":"","ocean_disable_title":"default","ocean_disable_heading":"default","ocean_post_title":"","ocean_post_subheading":"","ocean_post_title_style":"","ocean_post_title_background_color":"","ocean_post_title_background":0,"ocean_post_title_bg_image_position":"","ocean_post_title_bg_image_attachment":"","ocean_post_title_bg_image_repeat":"","ocean_post_title_bg_image_size":"","ocean_post_title_height":0,"ocean_post_title_bg_overlay":0.5,"ocean_post_title_bg_overlay_color":"","ocean_disable_breadcrumbs":"default","ocean_breadcrumbs_color":"","ocean_breadcrumbs_separator_color":"","ocean_breadcrumbs_links_color":"","ocean_breadcrumbs_links_hover_color":"","ocean_display_footer_widgets":"default","ocean_display_footer_bottom":"default","ocean_custom_footer_template":"0","footnotes":""},"class_list":["post-447","page","type-page","status-publish","hentry","entry"],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false,"ocean-thumb-m":false,"ocean-thumb-ml":false,"ocean-thumb-l":false},"uagb_author_info":{"display_name":"Bryan Higgs","author_link":"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/author\/bryan\/"},"uagb_comment_info":0,"uagb_excerpt":"Terminology The class which is&nbsp;inherited (or derived) from&nbsp;is called the: superclass&nbsp;(Java) base class&nbsp;(C++) parent class&nbsp;or&nbsp;ancestor class The class which&nbsp;inherits&nbsp;is called a: subclass&nbsp;(Java) derived class&nbsp;(C++) child class&nbsp;or&nbsp;descendant class Note that the terms&nbsp;subclass&nbsp;and&nbsp;superclass&nbsp;can be confusing! Superclass Subclasses Can you understand why? An Example Here&#8217;s an example involving Employees and Managers. Employee Class Consider the class&nbsp;Employee: Now, imagine&hellip;","_links":{"self":[{"href":"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/wp-json\/wp\/v2\/pages\/447","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/wp-json\/wp\/v2\/comments?post=447"}],"version-history":[{"count":11,"href":"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/wp-json\/wp\/v2\/pages\/447\/revisions"}],"predecessor-version":[{"id":614,"href":"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/wp-json\/wp\/v2\/pages\/447\/revisions\/614"}],"up":[{"embeddable":true,"href":"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/wp-json\/wp\/v2\/pages\/61"}],"wp:attachment":[{"href":"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/wp-json\/wp\/v2\/media?parent=447"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}