Video: Computational Thinking and problem solving, by Miles Berry 2024
Både gränssnitt och abstrakta klasser har abstrakta metoder i Java. Men de abstrakta metoderna spelar lite olika roller i dessa två typer av referenstyper. Hur kan du hålla allt rakt i ditt sinne?
Det första att göra är att komma ihåg att ingen lär sig om objektorienterade programmeringskoncept utan att ha massor av övning i skrivkod. Om du har det du är förvirrad kan det vara bra. Det betyder att du har förstått tillräckligt för att veta hur komplicerat det här är. Ju mer kod du skriver, desto bekvämare blir du med klasser, gränssnitt och alla dessa andra idéer.
Nästa sak att göra är att sortera ut skillnaderna i hur du förklarar abstrakta metoder. Här är historien.
I en vanlig (icke-abstrakt) klass | I ett gränssnitt | I en abstrakt klass | |
Går abstrakta metoder? | Nej | Ja | Ja |
Kan en metoddeklaration innehålla abstrakt sökord? | Nej | Ja | Ja |
Kan en metoddeklaration innehålla standard nyckelord (betyder "inte abstrakt")? | Nej | Ja | Nej |
Med varken abstrakt eller standard | Inte abstrakt | Abstract | Inte abstrakt |
Både gränssnitt och abstrakta klasser har abstrakta metoder. Så du kanske undrar hur du ska välja mellan att förklara ett gränssnitt och förklara en abstrakt klass. Faktum är att du kanske frågar tre professionella programmerare hur gränssnitt och abstrakta klasser skiljer sig från varandra. Om du gör det kan du få fem olika svar. (Ja, fem svar, inte tre svar.)
Gränssnitt och abstrakta klasser är liknande djur, och de nya funktionerna i Java 8 gjorde dem ännu mer likartade än i tidigare Java-versioner. Men den grundläggande tanken handlar om relationerna mellan sakerna.
- Förlängning av en underklass representerar en är en relation.
- Implementering av ett gränssnitt representerar ett förhållande mellan kan.
Om du vill ha mer konkreta bevis på skillnaden mellan ett gränssnitt och en abstrakt klass, överväga detta: En klass kan genomföra många gränssnitt, men en klass kan utsträcka endast en annan klass, även om den ena klassen är en abstrakt klass. Så, när du har förklarat
offentlig klass Dog utökar HousePet
kan du inte heller göra
Dog
utöka en
Friend
-klass. Men du kan göra
Dog
implementera ett
Befriendable
gränssnitt. Och så kan du göra samma
Dog
klassen genomföra ett
Trainable
gränssnitt.
Och om du vill ha en jämn mer påtaglig skillnad mellan ett gränssnitt och en abstrakt klass, här är en för dig: Ett gränssnitt kan inte innehålla några icke-statiska, icke-slutliga fält.
Så där. Gränssnitt och abstrakta klasser skiljer sig från varandra. Men om du är ny på spelet, borde du inte oroa dig för skillnaden. Läs bara så mycket kod som möjligt, och bli inte rädd när du ser en abstrakt metod. Det är allt som finns där.