{"id":62052,"date":"2016-11-22T19:00:05","date_gmt":"2016-11-22T17:00:05","guid":{"rendered":"https:\/\/www.javacodegeeks.com\/?p=62052"},"modified":"2016-11-22T12:06:09","modified_gmt":"2016-11-22T10:06:09","slug":"inheriting-javadoc-method-comments","status":"publish","type":"post","link":"https:\/\/www.javacodegeeks.com\/2016\/11\/inheriting-javadoc-method-comments.html","title":{"rendered":"Inheriting Javadoc Method Comments"},"content":{"rendered":"<p>Although the <a href=\"http:\/\/docs.oracle.com\/javase\/8\/docs\/technotes\/tools\/\">JDK Tools and Utilities<\/a> pages for the <a href=\"http:\/\/www.oracle.com\/technetwork\/articles\/java\/index-137868.html\">javadoc tool<\/a> describe the rules of Javadoc method comment reuse by implementing and inheriting methods, it is easy to unnecessarily explicitly describe comment inheritance with <code>{@inheritDoc}<\/code> when it&#8217;s not really needed because the same comments would be implicitly inherited. The <a href=\"http:\/\/docs.oracle.com\/javase\/8\/docs\/technotes\/tools\/windows\/javadoc.html\">Java 8 javadoc tool page<\/a> describes the rules of inherited method Javadoc comments under the section &#8220;<a href=\"http:\/\/docs.oracle.com\/javase\/8\/docs\/technotes\/tools\/windows\/javadoc.html#CHDFAGJH\">Method Common Inheritance<\/a>&#8221; and the <a href=\"http:\/\/docs.oracle.com\/javase\/7\/docs\/technotes\/tools\/solaris\/javadoc.html\">Java 7 javadoc tool page<\/a> similarly describes these rules under the section &#8220;<a href=\"http:\/\/docs.oracle.com\/javase\/7\/docs\/technotes\/tools\/solaris\/javadoc.html#inheritingcomments\">Automatic Copying of Method Comments<\/a>.&#8221; This post uses simple code examples to illustrate some of the key rules of Javadoc method comment inheritance.<\/p>\n<p>The following interfaces and classes are contrived examples that will be used in this post to illustrate inheritance of Javadoc comments on methods. Some inherited\/implementing methods include their own Javadoc comments that override parent&#8217;s\/interface&#8217;s methods comments fully or partially and other simply reuse the parent&#8217;s\/interface&#8217;s methods&#8217; documentation.<\/p>\n<p><strong>Herbivorous Interface<\/strong><\/p>\n<pre class=\"brush:java\">package dustin.examples.inheritance;\r\n\r\n\/**\r\n * Marks animals that eat plants.\r\n *\/\r\npublic interface Herbivorous\r\n{\r\n   \/**\r\n    * Eat the provided plant.\r\n    *\r\n    * @param plantToBeEaten Plant that will be eaten.\r\n    *\/\r\n   void eat(Plant plantToBeEaten);\r\n}<\/pre>\n<p><strong>Carnivorous Interface<\/strong><\/p>\n<pre class=\"brush:java\">package dustin.examples.inheritance;\r\n\r\n\/**\r\n * Marks an Animal that eats other animals.\r\n *\/\r\npublic interface Carnivorous\r\n{\r\n   \/**\r\n    * Eat the provided animal.\r\n    *\r\n    * @param animalBeingEaten Animal that will be eaten.\r\n    *\/\r\n   void eat(Animal animalBeingEaten);\r\n}<\/pre>\n<p><strong>Omnivorous Interface<\/strong><\/p>\n<pre class=\"brush:java\">package dustin.examples.inheritance;\r\n\r\n\/**\r\n * Eats plants and animals.\r\n *\/\r\npublic interface Omnivorous extends Carnivorous, Herbivorous\r\n{\r\n}<\/pre>\n<p><strong>Viviparous Interface<\/strong><\/p>\n<pre class=\"brush:java\">package dustin.examples.inheritance;\r\n\r\n\/**\r\n * Mammals that give birth to young that develop within\r\n * the mother's body.\r\n *\/\r\npublic interface Viviparous\r\n{\r\n   \/**\r\n    * Give birth to indicated number of offspring.\r\n    *\r\n    * @param numberOfOffspring Number of offspring being born.\r\n    *\/\r\n   void giveBirth(int numberOfOffspring);\r\n}<\/pre>\n<p><strong>Animal Class<\/strong><\/p>\n<pre class=\"brush:java\">package dustin.examples.inheritance;\r\n\r\n\/**\r\n * Animal.\r\n *\/\r\npublic abstract class Animal\r\n{\r\n   \/**\r\n    * Breathe.\r\n    *\/\r\n   public void breathe()\r\n   {\r\n   }\r\n\r\n   \/**\r\n    * Communicate verbally.\r\n    *\/\r\n   public abstract void verballyCommunicate();\r\n}<\/pre>\n<p><strong>Mammal Class<\/strong><\/p>\n<pre class=\"brush:java\">package dustin.examples.inheritance;\r\n\r\n\/**\r\n * Mammal.\r\n *\/\r\npublic abstract class Mammal extends Animal\r\n{\r\n}<\/pre>\n<p><strong>MammalWithHair Class<\/strong><\/p>\n<pre class=\"brush:java\">package dustin.examples.inheritance;\r\n\r\nimport java.awt.*;\r\n\r\n\/**\r\n * Mammal with hair (most mammals other than dolphins and whales).\r\n *\/\r\npublic abstract class MammalWithHair extends Mammal\r\n{\r\n   \/** Provide mammal's hair color. *\/\r\n   public abstract Color getHairColor();\r\n}<\/pre>\n<p><strong>Dog Class<\/strong><\/p>\n<pre class=\"brush:java\">package dustin.examples.inheritance;\r\n\r\nimport java.awt.Color;\r\n\r\nimport static java.lang.System.out;\r\n\r\n\/**\r\n * Canine and man's best friend.\r\n *\/\r\npublic class Dog extends MammalWithHair implements Omnivorous, Viviparous\r\n{\r\n   private final Color hairColor = null;\r\n\r\n   \/**\r\n    * {@inheritDoc}\r\n    * @param otherAnimal Tasty treat.\r\n    *\/\r\n   @Override\r\n   public void eat(final Animal otherAnimal)\r\n   {\r\n   }\r\n\r\n   \/**\r\n    * {@inheritDoc}\r\n    * @param plantToBeEaten Plant that this dog will eat.\r\n    *\/\r\n   @Override\r\n   public void eat(final Plant plantToBeEaten)\r\n   {\r\n   }\r\n\r\n   \/**\r\n    * {@inheritDoc}\r\n    * Bark.\r\n    *\/\r\n   public void verballyCommunicate()\r\n   {\r\n      out.println(\"Woof!\");\r\n   }\r\n\r\n   \/**\r\n    * {@inheritDoc}\r\n    * @param numberPuppies Number of puppies being born.\r\n    *\/\r\n   @Override\r\n   public void giveBirth(final int numberPuppies)\r\n   {\r\n   }\r\n\r\n   \/**\r\n    * Provide the color of the dog's hair.\r\n    *\r\n    * @return Color of the dog's fur.\r\n    *\/\r\n   @Override\r\n   public Color getHairColor()\r\n   {\r\n      return hairColor;\r\n   }\r\n}<\/pre>\n<p><strong>Cat Class<\/strong><\/p>\n<pre class=\"brush:java\">package dustin.examples.inheritance;\r\n\r\nimport java.awt.Color;\r\n\r\nimport static java.lang.System.out;\r\n\r\n\/**\r\n * Feline.\r\n *\/\r\npublic class Cat extends MammalWithHair implements Carnivorous, Viviparous\r\n{\r\n   private final Color hairColor = null;\r\n\r\n   \/**\r\n    * {@inheritDoc}\r\n    *\/\r\n   @Override\r\n   public void eat(final Animal otherAnimal)\r\n   {\r\n   }\r\n\r\n   @Override\r\n   public void verballyCommunicate()\r\n   {\r\n      out.println(\"Meow\");\r\n   }\r\n\r\n   @Override\r\n   public void giveBirth(int numberKittens)\r\n   {\r\n   }\r\n\r\n   @Override\r\n   public Color getHairColor()\r\n   {\r\n      return hairColor;\r\n   }\r\n}<\/pre>\n<p><strong>Horse Class<\/strong><\/p>\n<pre class=\"brush:java\">package dustin.examples.inheritance;\r\n\r\nimport java.awt.Color;\r\n\r\nimport static java.lang.System.out;\r\n\r\n\/**\r\n * Equine.\r\n *\/\r\npublic class Horse extends MammalWithHair implements Herbivorous, Viviparous\r\n{\r\n   private final Color hairColor = null;\r\n\r\n   \/**\r\n    * @param plant Plant to be eaten by this horse.\r\n    *\/\r\n   @Override\r\n   public void eat(final Plant plant)\r\n   {\r\n   }\r\n\r\n   \/**\r\n    *\r\n    *\/\r\n   @Override\r\n   public void verballyCommunicate()\r\n   {\r\n      out.println(\"Neigh\");\r\n   }\r\n\r\n   \/**\r\n    * @param numberColts Number of colts to be born to horse.\r\n    *\/\r\n   @Override\r\n   public void giveBirth(int numberColts)\r\n   {\r\n   }\r\n\r\n   @Override\r\n   public Color getHairColor()\r\n   {\r\n      return hairColor;\r\n   }\r\n}<\/pre>\n<p>The next screen snapshot shows the contents of the package that includes the interfaces and classes whose code listings are shown above (not all the classes and interfaces in the package had their code listings shown).<div style=\"display:inline-block; margin: 15px 0;\"> <div id=\"adngin-JavaCodeGeeks_incontent_video-0\" style=\"display:inline-block;\"><\/div> <\/div><\/p>\n<p><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/20161116-inheritancePackageJavadoc.png\"><img decoding=\"async\" class=\"aligncenter wp-image-62068 size-large\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/20161116-inheritancePackageJavadoc-1024x576.png\" alt=\"20161116-inheritancepackagejavadoc\" width=\"620\" height=\"349\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/20161116-inheritancePackageJavadoc-1024x576.png 1024w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/20161116-inheritancePackageJavadoc-300x169.png 300w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/20161116-inheritancePackageJavadoc-768x432.png 768w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/20161116-inheritancePackageJavadoc.png 1366w\" sizes=\"(max-width: 620px) 100vw, 620px\" \/><\/a><\/p>\n<p>The three classes of most interest here from methods&#8217; Javadoc perspective are the classes <code>Dog<\/code>, <code>Cat<\/code>, and <code>Horse<\/code> because they implement several interfaces and extend <code>MamalWithHair<\/code>, which extends <code>Mammal<\/code>, which extends <code>Animal<\/code>.<\/p>\n<p>The next screen snapshot is of the Javadoc for the <code>Animal<\/code> class rendered in a web browser.<\/p>\n<p><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/20161119-animalJavadoc-1.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-62070\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/20161119-animalJavadoc-1.png\" alt=\"20161119-animaljavadoc-1\" width=\"569\" height=\"651\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/20161119-animalJavadoc-1.png 569w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/20161119-animalJavadoc-1-262x300.png 262w\" sizes=\"(max-width: 569px) 100vw, 569px\" \/><\/a><\/p>\n<p>The <code>Animal<\/code> class doesn&#8217;t inherit any methods from a superclass and doesn&#8217;t implement any methods from an interface and is not very interesting for this blog post&#8217;s topic. However, other classes shown here extend this class and so it is interesting to see how its method comments affect the inheriting classes&#8217; methods&#8217; descriptions.<\/p>\n<p>The next two screen snapshots are of the Javadoc for the <code>Mammal<\/code> and <code>MammalWithHair<\/code> classes as rendered in a web browser. There are no Javadoc comments on any significance on <code>Mammal<\/code>, but there is one method comment for a new method introduced by <code>MammalWithHair<\/code>.<\/p>\n<p><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/20161119-mammalJavadoc.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-62071\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/20161119-mammalJavadoc.png\" alt=\"20161119-mammaljavadoc\" width=\"560\" height=\"630\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/20161119-mammalJavadoc.png 560w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/20161119-mammalJavadoc-267x300.png 267w\" sizes=\"(max-width: 560px) 100vw, 560px\" \/><\/a><\/p>\n<p><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/20161119-mammalWithHairMethodSummary.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-62072\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/20161119-mammalWithHairMethodSummary.png\" alt=\"20161119-mammalwithhairmethodsummary\" width=\"547\" height=\"590\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/20161119-mammalWithHairMethodSummary.png 547w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/20161119-mammalWithHairMethodSummary-278x300.png 278w\" sizes=\"(max-width: 547px) 100vw, 547px\" \/><\/a><\/p>\n<p>The next three screen snapshots are of subsets of Javadoc documentation in a web browser for the interfaces <code>Herbivorous<\/code>, <code>Carnivorous<\/code>, and <code>Omnivorous<\/code>. These interfaces provide documentation for methods that will be inherited by classes that implement these methods.<\/p>\n<p><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/20161119-herbivorousJavaDoc.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-62074\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/20161119-herbivorousJavaDoc.png\" alt=\"20161119-herbivorousjavadoc\" width=\"430\" height=\"532\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/20161119-herbivorousJavaDoc.png 430w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/20161119-herbivorousJavaDoc-242x300.png 242w\" sizes=\"(max-width: 430px) 100vw, 430px\" \/><\/a><\/p>\n<p><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/20161119-carnivorousJavadoc.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-62075\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/20161119-carnivorousJavadoc.png\" alt=\"20161119-carnivorousjavadoc\" width=\"449\" height=\"523\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/20161119-carnivorousJavadoc.png 449w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/20161119-carnivorousJavadoc-258x300.png 258w\" sizes=\"(max-width: 449px) 100vw, 449px\" \/><\/a><\/p>\n<p><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/20161119-omnivorousJavadoc.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-62076\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/20161119-omnivorousJavadoc.png\" alt=\"20161119-omnivorousjavadoc\" width=\"453\" height=\"384\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/20161119-omnivorousJavadoc.png 453w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/20161119-omnivorousJavadoc-300x254.png 300w\" sizes=\"(max-width: 453px) 100vw, 453px\" \/><\/a><\/p>\n<p>With the generated Javadoc methods documentation for the parent classes and the interfaces shown, it&#8217;s now time to look at the generated documentation for the methods of the classes extending those classes and implementing those interfaces.<\/p>\n<p>The methods in the <code>Dog<\/code> class shown earlier generally used <code>{@inheritDoc}<\/code> in conjunction with additional text. The results of inheriting method Javadoc comments from extended classes and implemented interfaces combined with additional test provided in <code>Dog<\/code>&#8216;s comments are shown in the next screen snapshots.<\/p>\n<p><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/20161119-dogJavadocMethodSummary.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-62077\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/20161119-dogJavadocMethodSummary.png\" alt=\"20161119-dogjavadocmethodsummary\" width=\"499\" height=\"643\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/20161119-dogJavadocMethodSummary.png 499w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/20161119-dogJavadocMethodSummary-233x300.png 233w\" sizes=\"(max-width: 499px) 100vw, 499px\" \/><\/a><\/p>\n<p><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/20161119-dogJavadocMethodDetailTop.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-62078\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/20161119-dogJavadocMethodDetailTop.png\" alt=\"20161119-dogjavadocmethoddetailtop\" width=\"290\" height=\"654\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/20161119-dogJavadocMethodDetailTop.png 290w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/20161119-dogJavadocMethodDetailTop-133x300.png 133w\" sizes=\"(max-width: 290px) 100vw, 290px\" \/><\/a><\/p>\n<p><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/20161119-dogJavadocMethodDetailBottom.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-62079\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/20161119-dogJavadocMethodDetailBottom.png\" alt=\"20161119-dogjavadocmethoddetailbottom\" width=\"241\" height=\"173\" \/><\/a><\/p>\n<p>The last set of screen snapshots demonstrates that the <code>Dog<\/code> class&#8217;s documentation mixes the documentation of its &#8220;parents&#8221; with its own specific documentation. This is not surprising. The <code>Dog<\/code> class&#8217;s methods generally explicitly inherited Javadoc documentation from the parents (base classes and interfaces), but the <code>Cat<\/code> class mostly has no Javadoc comments on its methods, except for the <code>eat<\/code> method, which simply uses <code>{@inheritDoc}<\/code>. The generated web browser output from this class is shown in the next screen snapshots.<\/p>\n<p><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/20161119-catJavadocMethodSummary.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-62080\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/20161119-catJavadocMethodSummary.png\" alt=\"20161119-catjavadocmethodsummary\" width=\"495\" height=\"648\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/20161119-catJavadocMethodSummary.png 495w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/20161119-catJavadocMethodSummary-229x300.png 229w\" sizes=\"(max-width: 495px) 100vw, 495px\" \/><\/a><\/p>\n<p><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/20161119-catJavadocMethodDetail.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-62081\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/20161119-catJavadocMethodDetail.png\" alt=\"20161119-catjavadocmethoddetail\" width=\"292\" height=\"661\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/20161119-catJavadocMethodDetail.png 292w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/20161119-catJavadocMethodDetail-133x300.png 133w\" sizes=\"(max-width: 292px) 100vw, 292px\" \/><\/a><\/p>\n<p>The methods in <code>Cat<\/code> that had no Javadoc comments applied show up in the generated web browser documentation with documentation inherited from their base classes or interfaces and the documentation on these methods includes the phrase &#8220;Description copied from class:&#8221; or &#8220;Description copied from interface:&#8221; as appropriate. The one <code>Cat<\/code> method that does explicitly include the documentation tag <code>{@inheritDoc}<\/code> does copy the parent&#8217;s method&#8217;s documentation, but does not include the &#8220;Description copied from&#8221; message.<\/p>\n<p>The <code>Horse<\/code> class&#8217;s methods are generally not documented at all and so their generated documentation includes the message &#8220;Description copied from&#8230;&#8221;. The <code>eat()<\/code> and <code>giveBirth()<\/code> methods of the <code>Horse<\/code> class override the <code>@param<\/code> portion and so the parameter documentation for these two methods in the generated web browser documentation (shown in the next set of screen snapshots) is specific to <code>Horse<\/code>.<\/p>\n<p><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/20161119-horseMethodSummary.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-62082\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/20161119-horseMethodSummary.png\" alt=\"20161119-horsemethodsummary\" width=\"496\" height=\"646\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/20161119-horseMethodSummary.png 496w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/20161119-horseMethodSummary-230x300.png 230w\" sizes=\"(max-width: 496px) 100vw, 496px\" \/><\/a><\/p>\n<p><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/20161119-horseMethodDetailTop.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-62083\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/20161119-horseMethodDetailTop.png\" alt=\"20161119-horsemethoddetailtop\" width=\"318\" height=\"559\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/20161119-horseMethodDetailTop.png 318w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/20161119-horseMethodDetailTop-171x300.png 171w\" sizes=\"(max-width: 318px) 100vw, 318px\" \/><\/a><\/p>\n<p><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/20161119-horseMethodDetailBottom.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-62084\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/20161119-horseMethodDetailBottom.png\" alt=\"20161119-horsemethoddetailbottom\" width=\"292\" height=\"158\" \/><\/a><\/p>\n<p>From the above code listings and screen snapshots of generated documentation from that code, some observations can be made regarding the inheritance of methods&#8217; Javadoc comments by extending and implementing classes. These observations are also described in the <a href=\"http:\/\/docs.oracle.com\/javase\/8\/docs\/technotes\/tools\/windows\/javadoc.html#CHDFAGJH\">javadoc tool documentation<\/a>:<\/p>\n<ul>\n<li>Javadoc comments are inherited from parent class&#8217;s methods and from implemented interface methods either implicitly when no text is specified (no Javadoc at all or empty Javadoc <code>\/** *\/<\/code>).\n<ul>\n<li><a href=\"http:\/\/docs.oracle.com\/javase\/8\/docs\/technotes\/tools\/windows\/javadoc.html#CHDFAGJH\">javadoc documentation<\/a>: &#8220;The <code>javadoc<\/code> command allows method comment inheritance in classes and interfaces to fill in missing text or to explicitly inherit method comments.&#8221;<\/li>\n<\/ul>\n<\/li>\n<li>Use <code>{@inheritDoc}<\/code> explicitly states that comments should be inherited.\n<ul>\n<li><a href=\"http:\/\/docs.oracle.com\/javase\/8\/docs\/technotes\/tools\/windows\/javadoc.html#CHDFAGJH\">javadoc documentation<\/a>: &#8220;Insert the <code>{@inheritDoc}<\/code> inline tag in a method main description or <code>@return<\/code>, <code>@param<\/code>, or <code>@throws<\/code> tag comment. The corresponding inherited main description or tag comment is copied into that spot.&#8221;<\/li>\n<\/ul>\n<\/li>\n<li>Implicit and explicit inheritance of method documentation can be achieved in combination by using <code>{@inheritDoc}<\/code> tags in different locations within the method comment.<\/li>\n<\/ul>\n<p>Given the above observations and given the advertised &#8220;<a href=\"http:\/\/docs.oracle.com\/javase\/8\/docs\/technotes\/tools\/windows\/javadoc.html#CHDEDCCA\">Method Comments Algorithm<\/a>&#8220;, a good rule of thumb for writing Javadoc from the perspective of the HTML generated from the Javadoc is to define general comments at as high a level as possible and allow automatic inheritance of the extended classes&#8217;s and implemented interfaces&#8217; methods&#8217; Javadoc documentation to take place, adding or overriding only portions of a method&#8217;s Javadoc text that are necessary to clarify or enhance the description for a lower-level method. This is better than copying and pasting the same comment on all methods in an inheritance or implementation hierarchy and needing to then keep them all updated together.<\/p>\n<p>This post has focused on the web browser presentation of generated Javadoc methods&#8217; documentation. Fortunately, the most commonly used Java IDEs (<a href=\"https:\/\/netbeans.org\/\">NetBeans<\/a> [<a href=\"http:\/\/stackoverflow.com\/questions\/6517266\/how-to-see-javadoc-documentation-on-mouse-hover-in-netbeans\">CTRL+hover<\/a>], <a href=\"https:\/\/www.jetbrains.com\/idea\/\">IntelliJ IDEA<\/a> [<a href=\"http:\/\/stackoverflow.com\/questions\/11053144\/how-to-see-javadoc-in-intellij-idea\">CTRL+Q<\/a> \/ <a href=\"https:\/\/www.jetbrains.com\/help\/idea\/2016.2\/viewing-inline-documentation.html#d1724232e207\">Settings<\/a>], <a href=\"https:\/\/eclipse.org\/downloads\/\">Eclipse<\/a> [<a href=\"http:\/\/stackoverflow.com\/questions\/9047291\/eclipse-pop-up-javadoc\">F2 \/ hover \/ Javadoc View<\/a>], and <a href=\"http:\/\/www.oracle.com\/technetwork\/developer-tools\/jdev\/downloads\/index.html\">JDeveloper<\/a> [<a href=\"http:\/\/www.techartifact.com\/blogs\/2012\/09\/top-10-jdeveloper-shortcuts.html\">CTRL-D<\/a>]) support presentation of Javadoc that generally follows the same rules of method documentation inheritance. This means that Java developers can often write less documentation and almost entirely avoid repeated documentation in inheritance and implementation hierarchies.<\/p>\n<div class=\"attribution\">\n<table>\n<tbody>\n<tr>\n<td><span class=\"reference\">Reference: <\/span><\/td>\n<td><a href=\"http:\/\/marxsoftware.blogspot.com\/2016\/11\/inheriting-javadoc-method-comments.html\">Inheriting Javadoc Method Comments<\/a> from our <a href=\"http:\/\/www.javacodegeeks.com\/join-us\/jcg\/\">JCG partner<\/a> Dustin Marx at the <a href=\"http:\/\/marxsoftware.blogspot.com\/\">Inspired by Actual Events <\/a> blog.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Although the JDK Tools and Utilities pages for the javadoc tool describe the rules of Javadoc method comment reuse by implementing and inheriting methods, it is easy to unnecessarily explicitly describe comment inheritance with {@inheritDoc} when it&#8217;s not really needed because the same comments would be implicitly inherited. The Java 8 javadoc tool page describes &hellip;<\/p>\n","protected":false},"author":122,"featured_media":148,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[164],"class_list":["post-62052","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-core-java","tag-javadoc"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Inheriting Javadoc Method Comments - Java Code Geeks<\/title>\n<meta name=\"description\" content=\"Although the JDK Tools and Utilities pages for the javadoc tool describe the rules of Javadoc method comment reuse by implementing and inheriting methods,\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.javacodegeeks.com\/2016\/11\/inheriting-javadoc-method-comments.html\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Inheriting Javadoc Method Comments - Java Code Geeks\" \/>\n<meta property=\"og:description\" content=\"Although the JDK Tools and Utilities pages for the javadoc tool describe the rules of Javadoc method comment reuse by implementing and inheriting methods,\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.javacodegeeks.com\/2016\/11\/inheriting-javadoc-method-comments.html\" \/>\n<meta property=\"og:site_name\" content=\"Java Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/javacodegeeks\" \/>\n<meta property=\"article:published_time\" content=\"2016-11-22T17:00:05+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/java-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Dustin Marx\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:site\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Dustin Marx\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2016\\\/11\\\/inheriting-javadoc-method-comments.html#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2016\\\/11\\\/inheriting-javadoc-method-comments.html\"},\"author\":{\"name\":\"Dustin Marx\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/945db7c24d37de80481570a5643f7958\"},\"headline\":\"Inheriting Javadoc Method Comments\",\"datePublished\":\"2016-11-22T17:00:05+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2016\\\/11\\\/inheriting-javadoc-method-comments.html\"},\"wordCount\":1024,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2016\\\/11\\\/inheriting-javadoc-method-comments.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/java-logo.jpg\",\"keywords\":[\"Javadoc\"],\"articleSection\":[\"Core Java\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2016\\\/11\\\/inheriting-javadoc-method-comments.html#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2016\\\/11\\\/inheriting-javadoc-method-comments.html\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2016\\\/11\\\/inheriting-javadoc-method-comments.html\",\"name\":\"Inheriting Javadoc Method Comments - Java Code Geeks\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2016\\\/11\\\/inheriting-javadoc-method-comments.html#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2016\\\/11\\\/inheriting-javadoc-method-comments.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/java-logo.jpg\",\"datePublished\":\"2016-11-22T17:00:05+00:00\",\"description\":\"Although the JDK Tools and Utilities pages for the javadoc tool describe the rules of Javadoc method comment reuse by implementing and inheriting methods,\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2016\\\/11\\\/inheriting-javadoc-method-comments.html#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2016\\\/11\\\/inheriting-javadoc-method-comments.html\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2016\\\/11\\\/inheriting-javadoc-method-comments.html#primaryimage\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/java-logo.jpg\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/java-logo.jpg\",\"width\":150,\"height\":150},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2016\\\/11\\\/inheriting-javadoc-method-comments.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Core Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\\\/core-java\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Inheriting Javadoc Method Comments\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"name\":\"Java Code Geeks\",\"description\":\"Java Developers Resource Center\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"alternateName\":\"JCG\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.javacodegeeks.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/javacodegeeks\",\"https:\\\/\\\/x.com\\\/javacodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/945db7c24d37de80481570a5643f7958\",\"name\":\"Dustin Marx\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a11cce21db49686299ad9afde297b5213759b39e79a54820195cf16b842639c0?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a11cce21db49686299ad9afde297b5213759b39e79a54820195cf16b842639c0?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a11cce21db49686299ad9afde297b5213759b39e79a54820195cf16b842639c0?s=96&d=mm&r=g\",\"caption\":\"Dustin Marx\"},\"sameAs\":[\"http:\\\/\\\/marxsoftware.blogspot.com\\\/\"],\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/author\\\/Dustin-Marx\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Inheriting Javadoc Method Comments - Java Code Geeks","description":"Although the JDK Tools and Utilities pages for the javadoc tool describe the rules of Javadoc method comment reuse by implementing and inheriting methods,","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.javacodegeeks.com\/2016\/11\/inheriting-javadoc-method-comments.html","og_locale":"en_US","og_type":"article","og_title":"Inheriting Javadoc Method Comments - Java Code Geeks","og_description":"Although the JDK Tools and Utilities pages for the javadoc tool describe the rules of Javadoc method comment reuse by implementing and inheriting methods,","og_url":"https:\/\/www.javacodegeeks.com\/2016\/11\/inheriting-javadoc-method-comments.html","og_site_name":"Java Code Geeks","article_publisher":"https:\/\/www.facebook.com\/javacodegeeks","article_published_time":"2016-11-22T17:00:05+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/java-logo.jpg","type":"image\/jpeg"}],"author":"Dustin Marx","twitter_card":"summary_large_image","twitter_creator":"@javacodegeeks","twitter_site":"@javacodegeeks","twitter_misc":{"Written by":"Dustin Marx","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.javacodegeeks.com\/2016\/11\/inheriting-javadoc-method-comments.html#article","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/2016\/11\/inheriting-javadoc-method-comments.html"},"author":{"name":"Dustin Marx","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/945db7c24d37de80481570a5643f7958"},"headline":"Inheriting Javadoc Method Comments","datePublished":"2016-11-22T17:00:05+00:00","mainEntityOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2016\/11\/inheriting-javadoc-method-comments.html"},"wordCount":1024,"commentCount":1,"publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2016\/11\/inheriting-javadoc-method-comments.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/java-logo.jpg","keywords":["Javadoc"],"articleSection":["Core Java"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.javacodegeeks.com\/2016\/11\/inheriting-javadoc-method-comments.html#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.javacodegeeks.com\/2016\/11\/inheriting-javadoc-method-comments.html","url":"https:\/\/www.javacodegeeks.com\/2016\/11\/inheriting-javadoc-method-comments.html","name":"Inheriting Javadoc Method Comments - Java Code Geeks","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2016\/11\/inheriting-javadoc-method-comments.html#primaryimage"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2016\/11\/inheriting-javadoc-method-comments.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/java-logo.jpg","datePublished":"2016-11-22T17:00:05+00:00","description":"Although the JDK Tools and Utilities pages for the javadoc tool describe the rules of Javadoc method comment reuse by implementing and inheriting methods,","breadcrumb":{"@id":"https:\/\/www.javacodegeeks.com\/2016\/11\/inheriting-javadoc-method-comments.html#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.javacodegeeks.com\/2016\/11\/inheriting-javadoc-method-comments.html"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/2016\/11\/inheriting-javadoc-method-comments.html#primaryimage","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/java-logo.jpg","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/java-logo.jpg","width":150,"height":150},{"@type":"BreadcrumbList","@id":"https:\/\/www.javacodegeeks.com\/2016\/11\/inheriting-javadoc-method-comments.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.javacodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"Java","item":"https:\/\/www.javacodegeeks.com\/category\/java"},{"@type":"ListItem","position":3,"name":"Core Java","item":"https:\/\/www.javacodegeeks.com\/category\/java\/core-java"},{"@type":"ListItem","position":4,"name":"Inheriting Javadoc Method Comments"}]},{"@type":"WebSite","@id":"https:\/\/www.javacodegeeks.com\/#website","url":"https:\/\/www.javacodegeeks.com\/","name":"Java Code Geeks","description":"Java Developers Resource Center","publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"alternateName":"JCG","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.javacodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.javacodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.javacodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/javacodegeeks","https:\/\/x.com\/javacodegeeks"]},{"@type":"Person","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/945db7c24d37de80481570a5643f7958","name":"Dustin Marx","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/a11cce21db49686299ad9afde297b5213759b39e79a54820195cf16b842639c0?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/a11cce21db49686299ad9afde297b5213759b39e79a54820195cf16b842639c0?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a11cce21db49686299ad9afde297b5213759b39e79a54820195cf16b842639c0?s=96&d=mm&r=g","caption":"Dustin Marx"},"sameAs":["http:\/\/marxsoftware.blogspot.com\/"],"url":"https:\/\/www.javacodegeeks.com\/author\/Dustin-Marx"}]}},"_links":{"self":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/62052","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/users\/122"}],"replies":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/comments?post=62052"}],"version-history":[{"count":0,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/62052\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media\/148"}],"wp:attachment":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media?parent=62052"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/categories?post=62052"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/tags?post=62052"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}