instanciada, da mesma forma metodos class nao podem utilizar-se de metodosnao class dentro da classe, o contrario e possivel, essas restricoes garantemque nao ocorrera nenhum "Acess Violation" ao utilizar metodosstatics.ExemploTPessoa =classprivate FNome: string;public class function ValidaCPF(ACPF:string): Boolean;end;classfunction TPessoa.ValidaCPF(ACPF: string): Boolean;begin //Neste ponto a variavel FNome nao e acessivel, ela so seria acessivel se fosseuma constante ou se fosse declarada como class varend;OverloadOlverload, significa sobrecarga, e como o nome ja diz, nosvamos sobrecarregar um metodo, o overload e utilizada quando temos anecessidade de ter dois metodos diferentes com o mesmo nome, porem, os parametrospassados para esses metodos devem ser diferentes, pra falar a verdade, ocompilador reconhece qual metodo e qual, atraves da lista de parametros.TPessoa =classprivatepublic constructor Create; overload; constructor Create(ANome:string); overload;end;Nesse caso, sobrecarregamos o metodo construtor da classe,mas como podemos ver a lista de parametros e diferente, o primeiro nao pede parametroalgum, enquanto o segundo exige o nome da pessoa, para o compilador poucoimporta o nome da variavel, o que importa na diferenciacao do metodosobrecarregado sao os tipos e posicaodos parametros da lista de parametros, isso implica que, mesmo se o nome dos parametrosforem diferentes se os tipos forem iguais e suas posicoes relativas foremiguais em ambos os metodos, nao existe como diferenciar um metodo do outro,logo, ocorrera um erro de compilacao.Veja o exemplo abaixo.TPessoa = classprivatepublic constructor Create(ACNPJ: string);overload; constructor Create(ACPF: string); overload;end;Isso nao e aceito, pois nao e possivel definir qual tipo demetodo esta sendo invocado mesmo o nome do parametro sendo diferente.InheritedInherited e utilizado para chamar funcoes de classes pai apartir de classes filhas, essas chamadas porem ocorrer em qualquer metodo daclasse filha contando que este nao seja um metodo static (class procedure oufunction), nao existem segredos ao se utilizar inherited para chamadas de metodosmais altos, sua chamada pode ser feita passando o nome do metodo ou nao, deacordo com o escopo da chamada, isto e, se existe um mesmo metodo na classe paique foi sobre-escrito na classe filha, nao e necessario utilizar inheritedseguido do nome do metodo.TPessoa = classprivatepublic destructor Destroy; override;end;destructorTPessoa.Destroy;begin ShowMessage('Estou sendodestruido'); inherited; // Tambempodemos utilizar inherited Destroy;end;Metodos que exigem passagem de parametros devem serchamados da seguinte forma: inheritedCalcularImposto(Valor);Tambem podemos utilizar isso para chamar um Create de classemais alta, antes ou depois de executar o create da classe filha desta forma:constructorCreate(ANome: string; APessoaFisica: Boolean);begin ShowMessage(ANome); inheritedCreate(APessoaFisica);end;ou aindaconstructorCreate(ANome: string; APessoaFisica: Boolean);begin inheritedCreate(APessoaFisica); ShowMessage(ANome);end;Repare que quando eu executo inheritedCreate(APessoaFisica);, estou chamando o metodo Create da classe pai, que no casoespera um parametro booleano, que de acordo com o nosso escopo define se e umapessoa fisica ou juridica.Ficamos por aqui nesse topico, nos proximos abordarei adestruicao de classes e algumas questoes como a utilizacao de memoria daaplicacao e desempenho de metodos, esses sao assuntos primordiais antes deavancarmos para herancas, classes agregadas e interface.Ate a proxima.