Desenvolvimento de aplicativos android: classes java que deve (e não deve) ser estendido

Se uma classe Java não está quebrado, não conserte. Suponha que você deseja adicionar funcionalidade a uma classe Java existente. Você gosta de Android do Atividade

classe, mas o pré-declarados Atividade classe exibe nada na tela. Você reescrever Android do Atividade classe? Não.

Em vez de reescrever uma classe existente, você estender a classe. Mesmo em um de não fazer nada aplicativo Android “Olá”, você escreve

classe pública MyActivity estende Atividade

Em seguida, no MyActivity A declaração de classe, você escreve

onCreate (Bundle savedInstanceState) vazio @Overridepublic {super.onCreate (savedInstanceState) -setContentView (R.layout.main) -}

Seu MyActivity classe cria uma nova funcionalidade, estendendo mais de Android do Atividade funcionalidade enquanto substituindo o Atividade classe com morte cerebral onCreate método.

classes final do Java

Na programação orientada a objeto, estendendo-se uma classe é a coisa mais nobre que você pode fazer.

Mas algumas classes não são destinadas a ser prorrogado. Tomemos, por exemplo, Java de Corda classe. UMA Corda é um Corda é um Corda. Você não quer alguém está MyString.length método para retornar o comprimento de tempo que leva para embaralhar caracteres de uma string. Para impedir alguém de fazer algo inesperado, não convencional, ou incomum com os métodos de uma corda, os criadores de Java fez a Corda classe final:

Classe String public final

Algumas das classes pré-declarada do Android também são finais, incluindo a Telefonia e MediaStore classes.

classes abstratas do Java



Assim como uma classe final odeia ser prorrogado, uma classe abstrata insiste em ser estendido. Android do ViewGroup é um exemplo de uma classe abstrata.

Video: Android App Development for Beginners Playlist

público abstrato classe ViewGroup {public void bringChildToFront (Ver criança) {int index = indexOfChild (criança) -se (índice gt; = 0) {removeFromArray (índice) -addInArray (criança, mChildrenCount) -child.mParent = este -}} protegida abstrato OnLayout anular (booleano alterado, int l, int t, int r, int b) -}

Android do ViewGroup.java arquivo é mais de 3.700 linhas. Portanto, este exemplo tem apenas uma pequena fração do código do arquivo. Mas você pode ver como uma classe torna-se abstrata. Para surpresa de ninguém, a palavra abstrato precede a palavra classe. Mas a palavra abstrato também começa a declaração de alguns métodos que pertencem à classe.

Os fundadores do Android decidiu que a idéia de um ViewGroup é útil. Eles estavam corretas porque seus layouts Android favoritos (LinearLayout, RelativeLayout, e assim por diante) são subclasses de ViewGroup. Eles também entenderam que a partir de um tipo de ViewGroup para outro, algumas funcionalidades não muda. Por exemplo, o exemplo acima define um bringChildToFront método, e subclasses de ViewGroup herdar esse método.

Mas os fundadores também percebeu que alguns aspectos de uma ViewGroup não fazem sentido a menos que você trabalhar com um determinado tipo de grupo. Por exemplo, uma LinearLayout posições coisas um após o outro, e uma RelativeLayout positions coisas acima, abaixo, e para o lado um do outro. Assim, o código acima não tem um full-blown OnLayout método.

Video: Desenvolvimento de App Android com o NetBeans

o OnLayout declaração não tem um corpo de método. Mas Android exige que cada subclasse da ViewGroup classe para declarar a sua própria OnLayout método. Java impõe essa exigência quando você declara método OnLayout ser estar abstrato.

Como um desenvolvedor, você não pode criar um objeto de uma classe abstrata. Se você escrever

grupo ViewGroup = novo ViewGroup () -

Java diz que você está se comportando mal. Para fazer algo de útil com o ViewGroup classe, você precisa de uma subclasse da ViewGroup classe. A subclasse tem uma versão concreta de cada método abstrato na ViewGroup classe:

MyLayout classe pacote com.allmycode.samples-import android.content.Context-import android.view.ViewGroup-pública estende ViewGroup {MyLayout pública (contexto Contexto) {super (contexto) -} @ vazio Overrideprotected OnLayout(Booleano alterado, int l, int t, int r, int b) -}}

Publicações relacionadas