Programación con java: algunas observaciones sobre las clases de android

Al iniciar un nuevo proyecto Java, Android Studio ofrece para crear una actividad para su proyecto. Android Studio le ofrece diferentes tipos de actividades, como una actividad básica, una actividad vacía, una actividad de inicio de sesión, y así sucesivamente. Si usted pide una actividad vacío, se obtiene este código:

com.allyourcode.a10_11- paquete

importación android.support.v7.app.AppCompatActivity-

importación android.os.Bundle-

Video: Programación Android Tutorial 1: Introducción

MainActivity clase pública se extiende AppCompatActivity {

@Anular

protected void onCreate (Bundle savedInstanceState) {

super.onCreate (savedInstanceState) -

setContentView (R.layout.activity_main) -

}

}

El código declara una clase llamada Actividad principal. Este nombre Actividad principal no es parte de la biblioteca API de Android. Es un nombre que usted hace cuando se crea un nuevo proyecto Android. (En realidad, Android Studio compone el nombre. Usted acepta el nombre o la cambie a algún otro nombre cuando se siguen los pasos para crear un nuevo proyecto.)

los Actividad principal clase extiende una clase que pertenece a la biblioteca SDK de Android, a saber, la AppCompatActivity clase. En otras palabras, el Actividad principal objeto es un AppCompatActivity objeto. los Actividad principal objeto tiene todos los derechos y responsabilidades que cualquier AppCompatActivity instancia tiene. Por ejemplo, el Actividad principal tiene una onCreate método, que se anula.

De hecho, la Actividad principal clase hereda alrededor de 460 líneas de código de Android AppCompatActivity clase, que hereda unas 1.000 líneas de Android de FragmentActivity clase, que hereda cerca de 6.700 líneas de la clase Actividad de Android. Los métodos heredados incluyen onas tales como getCallingActivity, getCallingPackage, getParent, getTitle, getTitleColor, GetWindow, onBackPressed, onkeydown, onKeyLongPress, onLowMemory, onMenuItemSelected, setTitle, setTitleColor, startActivity, de meta, y muchos, muchos otros. Se hereda toda esta funcionalidad con dos simples palabras: se extiende AppCompatActivity.

En la terminología de las relaciones familiares, su Actividad principal clase es un descendiente de Android de Actividad clase. Tu Actividad principal clase es un tipo de Actividad.

Esta imagen, tomada directamente de la documentación en línea de Android, resume la información sobre el AppCompatActivity clase.

java-programación-para-android-developers-2e-appcompatactivity
Un árbol AppCompatActivity.

Marcar la página para facilitar el acceso a la documentación de la biblioteca API de Android.

Además de ser una subclase, la AppCompatActivity clase implementa un montón de interfaces, incluyendo el AppCompatCallback interfaz, el TaskStackBuilder interfaz, y otros. Usted no tiene que recordar nada de esto. Si alguna vez tiene que saberlo, puede buscarlo en la página de documentación de Android.

súper palabras clave de Java, revisited

La palabra súper representa el constructor de la superclase. código diferente al usado súper palabra clave de diferentes maneras. Sí, súper siempre tiene algo que ver con la clase padre de una clase. Pero no, súper no siempre se refiere al constructor de la clase padre.

en una onCreate método, la llamada super.onCreate (savedInstanceState) envía savedInstanceState a la de la clase padre onCreate método. La clase padre es el AppCompatActivity clase. Así Java llama la AppCompatActivity la clase de onCreate método.

los AppCompatActivityla clase de onCreatMétodo E contiene su propia llamada a super.onCreate (savedInstanceState). los AppCompatActivity matriz de clase es el FragmentActivity clase. Así pasa Java savedInstanceState al FragmentActivity la clase de onCreate método. Y así.

Video: Como aprender java - Clases , Objetos y Encapsulación

No es hasta que llegue a la Actividad clase - de MainActivity bisabuelo de clase - que el código hace uso directo de la savedInstanceState variable. De esto savedInstanceState información, el código coloca la actividad de nuevo la forma en que estaba antes del sistema de la destruyó.

Fundición, de nuevo

Cuando usted llama findViewById, Java no sabe qué tipo de vista que va a encontrar. los findViewById método siempre devuelve una Ver ejemplo, pero un montón de clases de Android amplían la Ver clase. Por ejemplo, las clases Botón, Vista de texto, ImageView, Caja, Cronómetro, y RatingBar todas extender el Android de Ver clase. Si escribe el siguiente código:

// no hace esto !!

Vista de Texto textView-

Textview = findViewById (R.id.textView) -

Java deja escapar un sonoro rugido resentida: “¿Cómo se atreve usted asume que el objeto devuelto por una llamada a findViewById se refiere a una instancia de la Vista de texto clase!”(En realidad, Java muestra en silencio y mecánicamente una Tipos incompatibles mensaje de error en el editor de Android Studio.)

Estrechamiento significa tratar de asignar una largo valor a una int valor. UN largo valor tiene 64 bits, y una int valor tiene sólo 32 bits. Por lo que el intento de estrechamiento falla. En el código que se encuentra aquí, la mala findViewById llamada es otro intento de hacer estrechamiento - la asignación de la Ver valor devuelto por una llamada a un método Vista de texto variable. los Vista de texto clase es una subclase de la Ver clase, por lo que la asignación falla estrepitosamente.

apaciguar a los dioses de Java mediante la adición de un operador de casting para el código. Usted le dice a Java para convertir lo que se sale de la findViewById llamada a un método en una Vista de texto objeto.

Textview = (Vista de texto) findViewById (R.id.textView1) -

Mientras que usted está escribiendo el código Java que sigue la corriente y le dice: “Tu operador de fundición me demuestra que usted es consciente de la diferencia entre una Vista de texto y cualquier edad Ver. Voy a hacer mi mejor esfuerzo para interpretar el Ver objetos que encuentro en tiempo de ejecución como una Vista de texto objeto “. (En realidad, mientras se está escribiendo el código, Java no dice nada. El hecho de que Java no muestra mensajes de error cuando se utiliza este truco de fundición es una buena señal. característica de fundición de Java salva el día!)

De fundición evita que vea un mensaje de error al desarrollar su código. De esa manera, la fundición es una característica muy útil de Java. Pero la fundición no se puede ahorrar si el código contiene errores de ejecución. Al escribir

Textview = (TextView) findViewById (R.id.textView1) -

verificar que el nombre vista de texto representa una Vista de texto Widget. Cuando la aplicación se ejecuta, Java agarra el R.id.textView widget de la activity_main.xml archivo, y todo funciona muy bien. Sin embargo, puede que a veces se olvide de comprobar su R.java nombres con los componentes en el archivo XML. Una llamada a findViewById sorprendentemente escupe un Botón componente cuando su fundición dice Java para esperar una Vista de texto Widget. Cuando esto sucede, Java se ahoga con el operador de fundición y su aplicación se bloquea durante su funcionamiento. ¡Volver al tablero de dibujo!

Artículos Relacionados