Innholdsfortegnelse:
Video: Android 101 by Fred Widjaja 2024
Hvis en Java-klasse ikke er ødelagt, må du ikke fikse det. Anta at du vil legge til funksjonalitet til en eksisterende Java-klasse. Du liker Android's Aktivitetsklasse, men den forhåndsdeklarerte Aktivitetsklassen viser ingenting på skjermen. Skriver du om Android-aktivitetsklassen? Nei.
I stedet for å omskrive en eksisterende klasse, forlener du klassen. Selv i et ikke-noe Android-"Hello" -program, skriver du
offentlig klasse MyActivity utvider Aktivitet
Deretter skriver du
@Override public void onCreate (Bundle savedInstanceState) {super. onCreate (savedInstanceState); setContentView (R. layout. main);}
Din MyActivity-klassen skaper ny funksjonalitet ved å utvide det meste av Android-aktivitetsfunksjonaliteten, mens du overstyrer aktivitetsklassens hjernedøde onCreate-metode.
Java's siste klasser
I objektorientert programmering er det å utvide en klasse den edleste tingen du kan gjøre.
Men noen klasser er ikke ment å bli utvidet. Ta for eksempel Java's String-klassen. En streng er en streng er en streng. Du vil ikke ha noen MyString. lengde metode for å returnere hvor lang tid det tar å kryptere en strengs tegn. For å hindre at noen gjør uventede, ukonvensjonelle eller uvanlige med en strengs metoder, har skaperne av Java gjort String-klassen endelige:
Offentlig finaleklasse String
Noen av Android's forhåndsdeklarerte klasser er også endelige, inkludert Telefoni og MediaStore klasser.
Java's abstrakte klasser
På samme måte som en siste klasse hater å bli utvidet, insisterer en abstrakt klasse på å bli utvidet. Android's ViewGroup er et eksempel på en abstrakt klasse.
offentlig abstrakt class ViewGroup {public void bringChildToFront (Vis barn) {int index = indexOfChild (barn); hvis (indeks> = 0) {removeFromArray (indeks); addInArray (barn, mChildrenCount); barn. mParent = this;}} beskyttet abstrakt void onLayout (boolean endret, int l, int t, int r, int b);}
Android's ViewGroup. java filen er mer enn 3, 700 linjer lang. Så dette eksempelet har bare en liten brøkdel av filens kode. Men du kan se hvordan en klasse blir abstrakt. Til ingen overraskelse går ordet abstrakt foran ordklassen. Men ordet abstrakt begynner også å erklære noen metoder som tilhører klassen.
Grundleggerne av Android bestemte seg for at ideen om en ViewGroup er nyttig. De var korrekte fordi dine favoritt Android-oppsett (LinearLayout, RelativeLayout, og så videre) er underklasser av ViewGroup.De forsto også at fra en slags ViewGroup til en annen, endrer noen funksjonalitet ikke. For eksempel definerer eksemplet ovenfor en bringChildToFront-metode, og underklasser av ViewGroup arver denne metoden.
Men grunnleggerne skjønte også at noen aspekter av en ViewGroup ikke gir mening uten at du jobber med en bestemt gruppe. For eksempel plasserer en LinearLayout ting etter hverandre, og en RelativeLayout plasserer ting over, under og til siden av hverandre. Koden ovenfor har derfor ikke en fullblåst onLayout-metode.
OnLayout-deklarasjonen har ingen metoden kropp. Men Android krever at hver underklasse i ViewGroup-klassen skal erklære sin egen onLayout-metode. Java håndhever dette kravet når du erklære metode onLayout for å være abstrakt.
Som utvikler kan du ikke opprette et objekt fra en abstrakt klasse. Hvis du skriver
ViewGroup group = new ViewGroup ();
Java forteller deg at du oppfører deg dårlig. For å gjøre noe nyttig med ViewGroup-klassen, trenger du en underklasse av ViewGroup-klassen. Underklassen har en konkret versjon av hver abstrakt metode i ViewGroup-klassen:
pakken com. allmycode. prøver; importere android. innhold. Kontekst; importere android. utsikt. ViewGroup; offentlig klasse MyLayout utvider ViewGroup {offentlig MyLayout (Kontekst kontekst) {super (kontekst);} @Override protected void onLayout (boolsk endret, int l, int t, int r, int b);}}