{"componentChunkName":"component---src-templates-blog-post-js","path":"/java-iniciante-pt6/","result":{"data":{"markdownRemark":{"html":"<p>Neste artigo iremos abordar a <strong>Herança</strong> no <strong>Java</strong>, sendo esse um dos pilares para a <strong>Programação Orientada a Objetos</strong>. Iremos ver como se comportam relacionamentos de herança, o que é e para que serve a <strong>Sobrescrita</strong> de métodos. Por se tratar de um assunto mais extenso primeiramente será abordado os conceitos sobre herança e sobrescrita de métodos e posteriormente iremos nos aprofundar em conceitos como <strong>Abstração</strong> e entrar em <strong>Polimorfismo</strong>.</p>\n<p>Quando se pesquisa sobre esses temas em alguns tutoriais na internet não é incomum encontrar exemplos explicando <strong>Herança</strong> com classes como <strong>Animal</strong> e sub-classes como <strong>Humano</strong> e <strong>Cachorro</strong>. Entendo que possa ser didático para quem nunca viu esse assunto antes porém nesse artigo tentaremos ir um pouco além e mostrar exemplos um pouco mais próximos da realidade que uma pessoa desenvolvedora irá encontrar no seu dia-a-dia.</p>\n<h2 id=\"Introducao\" style=\"position:relative;\">Introdução<a href=\"#Introducao\" aria-label=\"Introducao permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2>\n<p>Herança é um mecanismo que permite ao desenvolvedor aplicar abstrações no código criando uma classe-mãe que possuem atributos ou métodos que podem ser reutilizados por sub-classes que fazem sentido terem aqueles comportamentos e até mesmo permitindo customizações nessas sub-classes.</p>\n<p>Para ficar mais claro vamos pensar que trabalhamos em um banco e que nele existe somente dois tipos de conta, uma para pessoas físicas e outra para pessoas jurídicas, podemos criar duas classes nesse caso:</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">ContaPessoaFisica</span> <span class=\"token punctuation\">{</span>\n\n    <span class=\"token keyword\">private</span> <span class=\"token class-name\">String</span> nome<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">private</span> <span class=\"token class-name\">String</span> documento<span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token class-name\">BigDecimal</span> <span class=\"token function\">deposita</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">BigDecimal</span> quantidade<span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n        <span class=\"token class-name\">System</span><span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"EXECUTA REGRA DE NEGÓCIO ESPECÍFICO PARA CONTA FISICA\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">return</span> <span class=\"token class-name\">BigDecimal</span><span class=\"token punctuation\">.</span>ZERO<span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token class-name\">BigDecimal</span> <span class=\"token function\">saca</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">BigDecimal</span> quantidade<span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n        <span class=\"token class-name\">System</span><span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"EXECUTA REGRA DE NEGÓCIO ESPECÍFICO PARA CONTA FISICA\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">return</span> <span class=\"token class-name\">BigDecimal</span><span class=\"token punctuation\">.</span>ZERO<span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">ContaPessoaJuridica</span> <span class=\"token punctuation\">{</span>\n\n    <span class=\"token keyword\">private</span> <span class=\"token class-name\">String</span> nome<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">private</span> <span class=\"token class-name\">String</span> documento<span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token class-name\">BigDecimal</span> <span class=\"token function\">deposita</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">BigDecimal</span> quantidade<span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n        <span class=\"token class-name\">System</span><span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"EXECUTA REGRA DE NEGÓCIO ESPECÍFICO PARA CONTA JURIDICA\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">return</span> <span class=\"token class-name\">BigDecimal</span><span class=\"token punctuation\">.</span>ZERO<span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token class-name\">BigDecimal</span> <span class=\"token function\">saca</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">BigDecimal</span> quantidade<span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n        <span class=\"token class-name\">System</span><span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"EXECUTA REGRA DE NEGÓCIO ESPECÍFICO PARA CONTA JURIDICA\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">return</span> <span class=\"token class-name\">BigDecimal</span><span class=\"token punctuation\">.</span>ZERO<span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Podemos perceber que essas duas classes são identicas até o momento, com exceção da lógica que cada uma iria realizar. Mas será que é saudável para um projeto de software ter que lidar com duplicações desse jeito? Imaginando um projeto maior isso logo cresce de uma maneira descontrolada o que vai deixar imprevisível o comportamento do sistema em casos de mudanças pois provavelmente se em algum momento for necessário aplicar uma mesma regra de negócio para contas físicas ou juridicas pode ocorrer desse comportamento não se propagar da forma que foi planejada ou mesmo se for criada outra modalidade de conta nesse projeto será necessário duplicar tudo novamente.</p>\n<p>Pensando em resolver essas complicações a <strong>Herança</strong> foi adotada na linguagem <strong>Java</strong> onde podemos ter a classe-mãe, nesse caso <strong>Conta</strong> e suas filhas <strong>PessoaFisica</strong> e <strong>PessoaJuridica</strong>:</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Conta</span> <span class=\"token punctuation\">{</span>\n\n    <span class=\"token keyword\">private</span> <span class=\"token class-name\">String</span> nome<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">private</span> <span class=\"token class-name\">String</span> documento<span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token class-name\">BigDecimal</span> <span class=\"token function\">deposita</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">BigDecimal</span> quantidade<span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n        <span class=\"token class-name\">System</span><span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"EXECUTA REGRA DE NEGÓCIO GENERALISTA\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">return</span> <span class=\"token class-name\">BigDecimal</span><span class=\"token punctuation\">.</span>ZERO<span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token class-name\">BigDecimal</span> <span class=\"token function\">saca</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">BigDecimal</span> quantidade<span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n        <span class=\"token class-name\">System</span><span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"EXECUTA REGRA DE NEGÓCIO GENERALISTA\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">return</span> <span class=\"token class-name\">BigDecimal</span><span class=\"token punctuation\">.</span>ZERO<span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">PessoaFisica</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">Conta</span><span class=\"token punctuation\">{</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">final</span> <span class=\"token class-name\">String</span> TIPO_DE_DOCUMENTO <span class=\"token operator\">=</span> <span class=\"token string\">\"CPF\"</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">PessoaJuridica</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">Conta</span><span class=\"token punctuation\">{</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">final</span> <span class=\"token class-name\">String</span> TIPO_DE_DOCUMENTO <span class=\"token operator\">=</span> <span class=\"token string\">\"CNPJ\"</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Podemos ver que a classe <strong>Conta</strong> funciona com a responsabilidade de guardar dados e comportamentos que serão comuns entre as contas físicas e juridicas e por sua vez as classes-filhas guardam atributos e métodos que são específicos para elas. Outro ponto importante é que foi usado a palavra reservada <strong>extends</strong>, essa palavra é o que irá indicar que está sendo feito um relacionamento do tipo <strong>Herança</strong>, onde após a palavra <strong>extends</strong> adicionamos a classe que está sendo herdada. Tem alguns pontos de melhoria em toda essa abordagem e até o fim do artigo iremos explorá-los.</p>\n<p>Agora podemos usar tanto uma conta fisica quanto uma jurídica:</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Main</span> <span class=\"token punctuation\">{</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">void</span> <span class=\"token function\">main</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">String</span><span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span> args<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n\n        <span class=\"token class-name\">PessoaFisica</span> contaPessoaFisica <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">PessoaFisica</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        contaPessoaFisica<span class=\"token punctuation\">.</span><span class=\"token function\">deposita</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">BigDecimal</span><span class=\"token punctuation\">.</span><span class=\"token function\">valueOf</span><span class=\"token punctuation\">(</span><span class=\"token number\">10</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        <span class=\"token class-name\">PessoaJuridica</span> contaPessoaJuridica <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">PessoaJuridica</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        contaPessoaJuridica<span class=\"token punctuation\">.</span><span class=\"token function\">saca</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">BigDecimal</span><span class=\"token punctuation\">.</span><span class=\"token function\">valueOf</span><span class=\"token punctuation\">(</span><span class=\"token number\">10</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Mas o que irá acontecer se quiséssemos criar uma instância de <strong>Conta</strong>? Será que nesse modelo ter uma conta que não é nem física e nem jurídica faz sentido?</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token class-name\">Conta</span> conta <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Conta</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\nconta<span class=\"token punctuation\">.</span><span class=\"token function\">deposita</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">BigDecimal</span><span class=\"token punctuation\">.</span><span class=\"token function\">valueOf</span><span class=\"token punctuation\">(</span><span class=\"token number\">10</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>Só não é possível como também é possível depositar e sacar de uma classe que idealmente existe como um molde para outros tipos de conta, porém iremos ver como solucionar esse problema; outro problema que pode ter ficado menos evidente é que agora a regra de negócio para contas físicas e jurídicas é a mesma e não era essa a intenção, precisamos de um jeito melhor de lidar com essas situações e o <strong>Java</strong> fornece as ferramentas para isso.</p>\n<h2 id=\"Object\" style=\"position:relative;\">Object<a href=\"#Object\" aria-label=\"Object permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2>\n<p>Antes mesmo de continuar é bom ter em mente que na linguagem <strong>Java</strong> tudo, com exceção dos tipos primitivos, tem relação com a classe <strong>Object</strong>. Então concluímos que tudo no <strong>Java</strong> herda de <strong>Object</strong>. Isso significa que no nosso exemplo a classe <strong>Conta</strong> herda de <strong>Object</strong> mas como pode isso se a classe <strong>Conta</strong> não tem uma declaração <strong>extends</strong>?</p>\n<p>Isso acontece pois a própria linguagem se encarrega disso e nos artigos anteriores já havíamos utilizado métodos da classe <strong>Object</strong> sem perceber, quando usamos métodos como <em>toString</em>, <em>equals</em> ou <em>hashCode</em> estamos fazendo uso de métodos da classe <strong>Object</strong>:</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Conta</span> <span class=\"token punctuation\">{</span>\n\n    <span class=\"token comment\">//RESTANTE DO CÓDIGO OMITIDO</span>\n\n    <span class=\"token annotation punctuation\">@Override</span>\n    <span class=\"token keyword\">public</span> <span class=\"token class-name\">String</span> <span class=\"token function\">toString</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">return</span> <span class=\"token string\">\"Conta{\"</span> <span class=\"token operator\">+</span>\n                <span class=\"token string\">\"nome='\"</span> <span class=\"token operator\">+</span> nome <span class=\"token operator\">+</span> <span class=\"token string\">'\\''</span> <span class=\"token operator\">+</span>\n                <span class=\"token string\">\", documento='\"</span> <span class=\"token operator\">+</span> documento <span class=\"token operator\">+</span> <span class=\"token string\">'\\''</span> <span class=\"token operator\">+</span>\n                <span class=\"token string\">'}'</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token annotation punctuation\">@Override</span>\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">boolean</span> <span class=\"token function\">equals</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">Object</span> o<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">this</span> <span class=\"token operator\">==</span> o<span class=\"token punctuation\">)</span> <span class=\"token keyword\">return</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>o <span class=\"token operator\">==</span> <span class=\"token keyword\">null</span> <span class=\"token operator\">||</span> <span class=\"token function\">getClass</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">!=</span> o<span class=\"token punctuation\">.</span><span class=\"token function\">getClass</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">return</span> <span class=\"token boolean\">false</span><span class=\"token punctuation\">;</span>\n        <span class=\"token class-name\">Conta</span> conta <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token class-name\">Conta</span><span class=\"token punctuation\">)</span> o<span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">return</span> <span class=\"token class-name\">Objects</span><span class=\"token punctuation\">.</span><span class=\"token function\">equals</span><span class=\"token punctuation\">(</span>nome<span class=\"token punctuation\">,</span> conta<span class=\"token punctuation\">.</span>nome<span class=\"token punctuation\">)</span> <span class=\"token operator\">&amp;&amp;</span> <span class=\"token class-name\">Objects</span><span class=\"token punctuation\">.</span><span class=\"token function\">equals</span><span class=\"token punctuation\">(</span>documento<span class=\"token punctuation\">,</span> conta<span class=\"token punctuation\">.</span>documento<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token annotation punctuation\">@Override</span>\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">int</span> <span class=\"token function\">hashCode</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">return</span> <span class=\"token class-name\">Objects</span><span class=\"token punctuation\">.</span><span class=\"token function\">hash</span><span class=\"token punctuation\">(</span>nome<span class=\"token punctuation\">,</span> documento<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Essa foi uma decisão de projeto dos criadores da linguagem, pois eles entenderam que esses métodos são comuns a todas as classes, o método <em>toString</em> retorna uma <strong>String</strong> para que nós pessoas possamos entender a representação daquela instância de objeto, o <em>equals</em> e o <em>hashCode</em> são muito importantes quando trabalhamos com coleções de dados e iremos ver a importância deles futuramente. </p>\n<p>Uma dúvida que pode ter ficado após ver o código acima, como o <em>toString</em> da classe <strong>Conta</strong> sabe que precisa ser formatado dessa forma ou como os métodos <em>equals</em> e <em>hashCode</em> sabem que precisam dos atributos <em>nome</em> e <em>documento</em> e o que é esse <em>@Override</em> escrito acima dos métodos? A resposta mais curta é que esses métodos não sabem e cabe a você dizer isso a eles.</p>\n<p>O <em>@Override</em> é uma <strong>Annotation</strong> do <strong>Java</strong>, não vamos entrar em detalhes agora mas basta entender que <strong>Annotations</strong> como essa indicam alguma coisa no código, nesse caso ela indica que esse método foi sobrescrito, criando assim um marcador sobre esse método, as <strong>Annotations</strong> também lidam com outras questões que serão abordadas mais pra frente.</p>\n<h2 id=\"Sobrescrita\" style=\"position:relative;\">Sobrescrita<a href=\"#Sobrescrita\" aria-label=\"Sobrescrita permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2>\n<p>Voltando ao problema do nosso projeto, agora a regra de negócio está compartilhada entre as contas e não é isso que queríamos. Como podemos manter a classe <strong>Conta</strong> com o que queremos mas sem propagar comportamentos que queremos que sejam próprios das classes filhas? Usando sobrescrita de métodos isso é possível, mas o que é sobrescrita de métodos?</p>\n<p>Voltando ao exemplo do método <em>toString</em> da classe <strong>Object</strong>:</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">public</span> <span class=\"token class-name\">String</span> <span class=\"token function\">toString</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token function\">getClass</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">getName</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">+</span> <span class=\"token string\">'@'</span> <span class=\"token operator\">+</span> <span class=\"token class-name\">Integer</span><span class=\"token punctuation\">.</span><span class=\"token function\">toHexString</span><span class=\"token punctuation\">(</span><span class=\"token function\">hashCode</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Na classe <strong>Object</strong> essa é a declaração do método <em>toString</em>, o nome da classe seguido do hexadecimal da classe indicando o endereço de memória do objeto que chamou o método, agora imagine se em todo objeto que chamássemos o <em>toString</em> fosse essa informação que fosse devolvida, será que seria útil para nós saber onde na memória o objeto está alocado? Pensando nisso existe a sobrescrita de métodos que permite customizações específicas para métodos que são herdados, logo com isso foi possível customizar o <em>toString</em> da classe <strong>Conta</strong> para que ele devolvesse uma <strong>String</strong> que seres humanos consigam ler e entender o seu significado.</p>\n<p>E como as classes <strong>PessoaFisica</strong> e <strong>PessoaJuridica</strong> herdam de <strong>Conta</strong> é possível customizar os métodos para a realidade de negócio delas, primeiramente mostrando a classe <strong>PessoaJuridica</strong>:</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">PessoaJuridica</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">Conta</span><span class=\"token punctuation\">{</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">final</span> <span class=\"token class-name\">String</span> TIPO_DE_DOCUMENTO <span class=\"token operator\">=</span> <span class=\"token string\">\"CNPJ\"</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token annotation punctuation\">@Override</span>\n    <span class=\"token keyword\">public</span> <span class=\"token class-name\">BigDecimal</span> <span class=\"token function\">saca</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">BigDecimal</span> quantidade<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token class-name\">System</span><span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"VALIDANDO...\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">if</span><span class=\"token punctuation\">(</span>quantidade<span class=\"token punctuation\">.</span><span class=\"token function\">compareTo</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">BigDecimal</span><span class=\"token punctuation\">.</span>ZERO<span class=\"token punctuation\">)</span> <span class=\"token operator\">&lt;=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n            <span class=\"token class-name\">System</span><span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"VALIDAÇÃO RETORNA ERRO\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token keyword\">throw</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">IllegalArgumentException</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"VALOR DEVE SER MAIOR DO QUE ZERO\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n        <span class=\"token keyword\">return</span> <span class=\"token keyword\">super</span><span class=\"token punctuation\">.</span><span class=\"token function\">saca</span><span class=\"token punctuation\">(</span>quantidade<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token annotation punctuation\">@Override</span>\n    <span class=\"token keyword\">public</span> <span class=\"token class-name\">BigDecimal</span> <span class=\"token function\">deposita</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">BigDecimal</span> quantidade<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token class-name\">System</span><span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"VALIDANDO...\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">if</span><span class=\"token punctuation\">(</span>quantidade<span class=\"token punctuation\">.</span><span class=\"token function\">compareTo</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">BigDecimal</span><span class=\"token punctuation\">.</span>ZERO<span class=\"token punctuation\">)</span> <span class=\"token operator\">&lt;=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n            <span class=\"token class-name\">System</span><span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"VALIDAÇÃO RETORNA ERRO\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token keyword\">throw</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">IllegalArgumentException</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"VALOR DEVE SER MAIOR DO QUE ZERO\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n        <span class=\"token keyword\">return</span> <span class=\"token keyword\">super</span><span class=\"token punctuation\">.</span><span class=\"token function\">deposita</span><span class=\"token punctuation\">(</span>quantidade<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Na classe <strong>PessoaJuridica</strong> sobrescrevemos os métodos <em>saca</em> e <em>deposita</em> e com isso ganhamos mais flexibilidade pois agora podemos executar uma validação, que poderia estar na super classe <strong>Conta</strong> mas para fins didáticos vou deixar aqui para ficar claro que podemos executar regras diferentes em métodos sobrescritos, perceba também que apesar dos métodos estarem sobrescritos no final de cada um deles é feito uma chamada <strong>super.saca(quantidade)</strong> e <strong>super.deposita(quantidade)</strong> esse exemplo foi deixado aí para que você entenda que é possível executar um método na sub-classe e delegar para a super classe o restante da execução, basta usar o operador <strong>super</strong> que delega para a super classe a chamada do método. Contudo podemos querer, por vários motivos, que a execução do método sobrescrito fique contido somente na classe específica e para isso podemos fazer do jeito como foi feito na classe <strong>PessoaFisica</strong>:</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">PessoaFisica</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">Conta</span><span class=\"token punctuation\">{</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">final</span> <span class=\"token class-name\">String</span> TIPO_DE_DOCUMENTO <span class=\"token operator\">=</span> <span class=\"token string\">\"CPF\"</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token annotation punctuation\">@Override</span>\n    <span class=\"token keyword\">public</span> <span class=\"token class-name\">BigDecimal</span> <span class=\"token function\">saca</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">BigDecimal</span> quantidade<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token class-name\">System</span><span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"APLICANDO REGRA MUITO ESPECÍFICA SEM CHAMAR A SUPER CLASSE\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">return</span> quantidade<span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token annotation punctuation\">@Override</span>\n    <span class=\"token keyword\">public</span> <span class=\"token class-name\">BigDecimal</span> <span class=\"token function\">deposita</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">BigDecimal</span> quantidade<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token class-name\">System</span><span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"APLICANDO REGRA MUITO ESPECÍFICA SEM CHAMAR A SUPER CLASSE\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">return</span> quantidade<span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Bastou retirar o operador <strong>super</strong> para que o método fosse isolado dentro da classe, agora executando o código:</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token class-name\">PessoaFisica</span> contaPessoaFisica <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">PessoaFisica</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\ncontaPessoaFisica<span class=\"token punctuation\">.</span><span class=\"token function\">deposita</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">BigDecimal</span><span class=\"token punctuation\">.</span><span class=\"token function\">valueOf</span><span class=\"token punctuation\">(</span><span class=\"token number\">10</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token class-name\">PessoaJuridica</span> contaPessoaJuridica <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">PessoaJuridica</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\ncontaPessoaJuridica<span class=\"token punctuation\">.</span><span class=\"token function\">saca</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">BigDecimal</span><span class=\"token punctuation\">.</span><span class=\"token function\">valueOf</span><span class=\"token punctuation\">(</span><span class=\"token number\">10</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>Teremos a seguinte saída:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">APLICANDO REGRA MUITO ESPECÍFICA SEM CHAMAR A SUPER CLASSE\nVALIDANDO<span class=\"token punctuation\">..</span>.\nEXECUTA REGRA DE NEGÓCIO GENERALISTA</code></pre></div>\n<p>Agora resolvemos o problema de ter regras distribuídas para classes que não fazem sentido ter aquela regra, porém ainda temos o problema de poder criar uma classe <strong>Conta</strong> e iremos ver agora como solucionar isso com <strong>Classes Abstratas</strong> no próximo artigo.</p>\n<h2 id=\"Limitacoes\" style=\"position:relative;\">Limitações<a href=\"#Limitacoes\" aria-label=\"Limitacoes permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2>\n<p>A <strong>Herança</strong> é uma grande ferramenta que auxilia o desenvolvimento de sistemas porém existem algumas limitações e a mais importante no que tange a linguagem <strong>Java</strong> é que só podemos fazer herança de uma única classe pois no <strong>Java</strong> não existe herança múltipla. Por exemplo vamos supor que no futuro exista um tipo bem especial de <strong>Conta</strong> onde ela é ao mesmo tempo uma conta de pessoa física e uma conta de pessoa jurídica, eu sei que pode ser estranho isso mas estamos só supondo para explicar o conceito. Agora imagine que você como pessoa desenvolvedora queira utilizar de <strong>Herança</strong> para resolver esse problema e pensou que poderia criar um classe <strong>ContaHibrida</strong> que herde de <strong>PessoaFisica</strong> e de <strong>PessoaJuridica</strong> ao mesmo tempo e resolveu fazer isso:</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">ContaHibrida</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">ContaPessoaFisica</span><span class=\"token punctuation\">,</span> <span class=\"token class-name\">ContaPessoaJuridica</span><span class=\"token punctuation\">{</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Nesse momento o compilador irá reclamar e exibir uma mensagem parecida com isso:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">Class cannot extend multiple classes</code></pre></div>\n<p>Agora vamos ir um passo além na nossa imaginação e pensar que isso não gerasse erro e deu tudo certo na sua classe <strong>ContaHibrida</strong> e você tentou usá-la assim:</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token class-name\">ContaHibrida</span> contaHibrida <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">ContaHibrida</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\ncontaHibrida<span class=\"token punctuation\">.</span><span class=\"token function\">saca</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">BigDecimal</span><span class=\"token punctuation\">.</span><span class=\"token function\">valueOf</span><span class=\"token punctuation\">(</span><span class=\"token number\">10</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>Qual método <em>saca</em> será executado? O da <strong>PessoaFisica</strong> ou o da <strong>PessoaJuridica</strong>? Esse problema é chamado de problema diamante onde teríamos duas classes com o mesmo método, com a mesma assinatura, parâmetros e com uma sub-classe tentando executá-lo, o compilador não tem condições de saber qual executar e por conta disso a herança múltipla não foi adotada na linguagem <strong>Java</strong>.</p>\n<h2 id=\"Conclusao\" style=\"position:relative;\">Conclusão<a href=\"#Conclusao\" aria-label=\"Conclusao permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2>\n<p>Essa é a primeira parte que falamos sobre <strong>Herança</strong>, nesse artigo foi mostrado o que é <strong>Herança</strong> no <strong>Java</strong> e qual tipo de problema ela resolve. Também entendemos mais como a <strong>sobrescrita de métodos</strong> nos auxilia com classes que herdam métodos que precisam ser customizados. Foi mostrado também uma limitação da <strong>Herança</strong> no <strong>Java</strong> que é a questão de heranças múltiplas. No próximo artigo iremos adentrar um pouco mais no conceito <strong>É-UM</strong> da <strong>Herança</strong> e serão apresentados as <strong>Classes Abstratas</strong>.</p>\n<p>O código deste artigo se encontra no <a href=\"https://github.com/guilhermegarcia86/helloworld\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">GitHub</a></p>\n<p>Visite também o nosso canal no <a href=\"https://www.youtube.com/channel/UCDWmrzFPkkQf5VI_ziZrgvw\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Youtube</a> para mais acompanhar essa série de <strong>Primeiros passos com o Java</strong> e muito mais conteúdos sobre programação.</p>","fields":{"slug":"/java-iniciante-pt6/"},"frontmatter":{"date":"26 de outubro de 2021","description":"POO Herança parte 1","title":"Primeiros passos com Java VI","tags":["Java","Beginner","POO"],"author":"Guilherme Alves","image":{"id":"b2ab4756-285b-57ef-b5c8-635788c04be1","publicURL":"/static/ede02b44424d287921424a61fbbd2dc9/java-artigoVI.png","childImageSharp":{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAAACXBIWXMAABYlAAAWJQFJUiTwAAAB2ElEQVQ4y31Sa28aMRD02b73gwNalIRQBQW4UiKhVCqpKlKl3xGK+v//y3TH96hR0n5Y2V6PZ2d2rXQQoI+AoRS0tbCjMWwUwyYpTJZDaw0f6+O5KlmjMITqEz7IVDV0nAhxCFNWbRHmhdS8Q6w74jiKoIakAF1FPhrVLUleOEIj+38R+YRRJAovgdpdWLFIu1Ropx9huA/UgHNKg8sCg2XfqursW2Ng08w9tOUItiihPZXBO/bfEDKYoEL1nyDOytD88xtCHqqqwriusby7w8Nuh+urK3xaLPBlu8X85hoL2fPM+/1+j816jdlsNgzs75Q7C7qzsBbgr5cXrFYr/Hx+xul0wk4KfH18xPenJxyPR3d/OByw/dw4ItM5c1MOvP5FksiztndJHGMymeDDdIrb+dypr8oSWZpetCBsHqDryfB+IOx7R6JMSLnSAqO35IbmDaeQAuW3HyhubhHKL7D9x1YdiMSlgKiMisbjsVPIvZHJBx1hX+B+ucTv11dsmqZ1JhjFL1LLg1Ss9NaZYz9iURnKRP0eh6LC2pa82WxwPp/dEJ19KuRjTpjKiqJwwWpZF9zned6d07YdSXLRBhYbCP0GUzJVUW3ek3nkJKJy69kPPGIS/gFFTDO7SzPhQwAAAABJRU5ErkJggg==","aspectRatio":1.4096916299559472,"src":"/static/ede02b44424d287921424a61fbbd2dc9/0823f/java-artigoVI.png","srcSet":"/static/ede02b44424d287921424a61fbbd2dc9/c67b7/java-artigoVI.png 320w,\n/static/ede02b44424d287921424a61fbbd2dc9/d3930/java-artigoVI.png 640w,\n/static/ede02b44424d287921424a61fbbd2dc9/0823f/java-artigoVI.png 1280w,\n/static/ede02b44424d287921424a61fbbd2dc9/17523/java-artigoVI.png 1747w","sizes":"(max-width: 1280px) 100vw, 1280px"}}}},"timeToRead":10}},"pageContext":{"slug":"/java-iniciante-pt6/","previous":{"fields":{"slug":"/java-iniciante-pt5/"},"frontmatter":{"title":"Primeiros passos com Java V","date":"13 out, 2021"}},"next":{"fields":{"slug":"/java-iniciante-pt7/"},"frontmatter":{"title":"Primeiros passos com Java VII","date":"09 nov, 2021"}}}},"staticQueryHashes":["63159454"]}