90% de seguretat de les preguntes de l'entrevista
Hi ha la llista de 300 preguntes bàsiques de l'entrevista de Java. Si s'ha fet alguna pregunta bàsica d'entrevista de Java, si us plau, publiqueu-la a la secció de preguntes. Assegurem que aquí rebràs el 90% de les preguntes i respostes més freqüents de l'entrevista.
Les respostes a les preguntes de l'entrevista Core Java són breus i concretes. Les preguntes bàsiques de l'entrevista de Java es classifiquen en preguntes d'entrevista bàsica de Java, preguntes d'entrevista OOP, preguntes d'entrevista de gestió de cadenes, preguntes d'entrevista multithreading, preguntes d'entrevista de col·lecció, preguntes d'entrevista JDBC, etc.
1 2 3 4 5
Core Java: Conceptes bàsics de preguntes d'entrevista de Java
1) Què és Java?
Java és l'alt nivell, orientat a objectes , llenguatge de programació robust, segur, independent de la plataforma, d'alt rendiment, multiprocés i llenguatge de programació portàtil. Va ser desenvolupat per James Gosling el juny de 1991. També es pot conéixer com la plataforma ja que proporciona el seu propi JRE i API.
2) Quines diferències hi ha entre C++ i Java?
Les diferències entre C++ i Java es donen a la taula següent.
Índex de comparació | C++ | Java |
---|---|---|
Independent de la plataforma | C++ depèn de la plataforma. | Java és independent de la plataforma. |
S'utilitza principalment per | C++ s'utilitza principalment per a la programació del sistema. | Java s'utilitza principalment per a la programació d'aplicacions. S'utilitza àmpliament en aplicacions de finestres, basades en web, empresarials i mòbils. |
Objectiu de disseny | C++ va ser dissenyat per a la programació de sistemes i aplicacions. Va ser una extensió de Llenguatge de programació C . | Java va ser dissenyat i creat com a intèrpret per a sistemes d'impressió, però més tard es va estendre com a xarxa de suport informàtica. Va ser dissenyat amb l'objectiu de ser fàcil d'utilitzar i accessible a un públic més ampli. |
Anar a | C++ admet la declaració goto. | Java no admet la declaració goto. |
Herència múltiple | C++ admet l'herència múltiple. | Java no admet l'herència múltiple mitjançant classe. Es pot aconseguir mitjançant interfícies en java . |
Sobrecàrrega de l'operador | Suporta C++ sobrecàrrega de l'operador . | Java no admet la sobrecàrrega d'operadors. |
Apuntadors | C++ admet punters. Podeu escriure un programa de punter en C++. | Java admet el punter internament. Tanmateix, no podeu escriure el programa punter en java. Significa que Java té un suport restringit de punter a Java. |
Compilador i intèrpret | C++ només utilitza compilador. C++ es compila i s'executa mitjançant el compilador que converteix el codi font en codi màquina, de manera que C++ depèn de la plataforma. | Java utilitza un compilador i un intèrpret. El codi font de Java es converteix en bytecode en el moment de la compilació. L'intèrpret executa aquest bytecode en temps d'execució i produeix la sortida. Java s'interpreta per això és independent de la plataforma. |
Truca per valor i Truca per referència | C++ admet trucades per valor i trucades per referència. | Java només admet trucades per valor. No hi ha cap trucada per referència a Java. |
Estructura i unió | C++ admet estructures i unions. | Java no admet estructures i unions. |
Suport de fil | C++ no té suport integrat per a fils. Es basa en biblioteques de tercers per al suport de fils. | Java té integrat fil suport. |
Comentari de documentació | C++ no admet comentaris de documentació. | Java admet comentaris de documentació (/** ... */) per crear documentació per al codi font de Java. |
Paraula clau virtual | C++ admet la paraula clau virtual perquè puguem decidir si anul·la o no una funció. | Java no té cap paraula clau virtual. Podem anul·lar tots els mètodes no estàtics per defecte. En altres paraules, els mètodes no estàtics són virtuals per defecte. |
desplaçament dret sense signar >>> | C++ no admet l'operador >>>. | Java admet l'operador de desplaçament a la dreta sense signe >>> que omple zero a la part superior per als nombres negatius. Per als nombres positius, funciona igual que l'operador >>. |
Arbre de l'herència | C++ sempre crea un nou arbre d'herència. | Java utilitza un únic arbre d'herència sempre perquè totes les classes són fills de la classe Object a Java. La classe d'objecte és l'arrel de la herència arbre en java. |
Maquinari | C++ és més proper al maquinari. | Java no és tan interactiu amb el maquinari. |
Orientat a objectes | C++ és un llenguatge orientat a objectes. Tanmateix, en llenguatge C, la jerarquia d'arrel única no és possible. | Java també és un orientat a objectes llenguatge. Tanmateix, tot (excepte els tipus fonamentals) és un objecte a Java. És una jerarquia arrel única, ja que tot es deriva de java.lang.Object. |
3) Llista les característiques del llenguatge de programació Java.
Hi ha les següents característiques en el llenguatge de programació Java.
4) Què entens per màquina virtual Java?
Màquina virtual Java és una màquina virtual que permet a l'ordinador executar el programa Java. JVM actua com un motor en temps d'execució que crida al mètode principal present al codi Java. JVM és l'especificació que s'ha d'implementar al sistema informàtic. El codi Java és compilat per JVM per ser un bytecode que és independent de la màquina i proper al codi natiu.
5) Quina diferència hi ha entre JDK, JRE i JVM?
JVM
JVM és l'acrònim de Java Virtual Machine; és una màquina abstracta que proporciona l'entorn d'execució en el qual es pot executar el bytecode Java. És una especificació que especifica el funcionament de la màquina virtual Java. La seva implementació ha estat proporcionada per Oracle i altres empreses. La seva implementació es coneix com JRE.
Les JVM estan disponibles per a moltes plataformes de maquinari i programari (per tant, la JVM depèn de la plataforma). És una instància en temps d'execució que es crea quan executem la classe Java. Hi ha tres nocions de la JVM: especificació, implementació i instància.
JRE
JRE significa Java Runtime Environment. És la implementació de JVM. El Java Runtime Environment és un conjunt d'eines de programari que s'utilitzen per desenvolupar aplicacions Java. S'utilitza per proporcionar l'entorn d'execució. És la implementació de JVM. Existeix físicament. Conté un conjunt de biblioteques + altres fitxers que JVM utilitza en temps d'execució.
JDK
JDK és l'acrònim de Java Development Kit. És un entorn de desenvolupament de programari que s'utilitza per desenvolupar aplicacions i miniaplicacions Java. Existeix físicament. Conté eines de desenvolupament JRE +. JDK és una implementació de qualsevol de les plataformes Java que s'indiquen a continuació publicades per Oracle Corporation:
- Plataforma Java d'edició estàndard
- Plataforma Java Enterprise Edition
- Plataforma Java Micro Edition
6) Quants tipus d'àrees de memòria assigna JVM?
Molts tipus:
7) Què és el compilador JIT?
Compilador Just-In-Time (JIT): S'utilitza per millorar el rendiment. JIT compila parts del bytecode que tenen una funcionalitat similar al mateix temps i, per tant, redueix la quantitat de temps necessari per a la compilació. Aquí el terme compilador fa referència a un traductor del conjunt d'instruccions d'una màquina virtual Java (JVM) al conjunt d'instruccions d'una CPU específica.
8) Quina és la plataforma?
Una plataforma és l'entorn de maquinari o programari en el qual s'executa una peça de programari. Hi ha dos tipus de plataformes, basades en programari i en maquinari. Java proporciona la plataforma basada en programari.
9) Quines són les principals diferències entre la plataforma Java i altres plataformes?
Hi ha les següents diferències entre la plataforma Java i altres plataformes.
- Java és la plataforma basada en programari, mentre que altres plataformes poden ser plataformes de maquinari o plataformes basades en programari.
- Java s'executa a la part superior d'altres plataformes de maquinari, mentre que altres plataformes només poden tenir els components de maquinari.
10) Què dóna a Java la seva naturalesa d''escriure una vegada i executar en qualsevol lloc'?
El bytecode. El compilador Java converteix els programes Java en el fitxer de classe (Byte Code) que és el llenguatge intermedi entre el codi font i el codi màquina. Aquest bytecode no és específic de la plataforma i es pot executar en qualsevol ordinador.
11) Què és el carregador de classes?
Classloader és un subsistema de JVM que s'utilitza per carregar fitxers de classe. Sempre que executem el programa java, el carregador de classes el carrega primer. Hi ha tres carregadors de classes integrats a Java.
12) El nom de fitxer .java buit és un nom de fitxer font vàlid?
Sí, Java permet desar el nostre fitxer java per .java només, hem de compilar-lo per javac .java i corre per nom de classe java Prenguem un exemple senzill:
//save by .java only class A{ public static void main(String args[]){ System.out.println('Hello java'); } } //compile by javac .java //run by java A
compila-ho per javac .java
córrer-ho java A
13) La paraula clau esborra, següent, principal, sortida o nul·la a Java?
No.
14) Si no proporciono cap argument a la línia d'ordres, quin valor emmagatzemat a la matriu String passarà al mètode main(), buit o NULL?
Està buit, però no nul.
15) Què passa si escric static public void en lloc de public static void?
El programa es compila i s'executa correctament perquè l'ordre dels especificadors no importa a Java.
16) Quin és el valor per defecte de les variables locals?
Les variables locals no estan inicialitzades amb cap valor per defecte, ni primitives ni referències d'objectes.
17) Quins són els diferents especificadors d'accés a Java?
A Java, els especificadors d'accés són les paraules clau que s'utilitzen per definir l'àmbit d'accés del mètode, classe o variable. A Java, hi ha quatre especificadors d'accés que s'indiquen a continuació.
18) Quina és la finalitat dels mètodes i variables estàtiques?
Els mètodes o variables definits com a estàtics es comparteixen entre tots els objectes de la classe. L'estàtica és la part de la classe i no de l'objecte. Les variables estàtiques s'emmagatzemen a l'àrea de classe i no cal que creem l'objecte per accedir a aquestes variables. Per tant, s'utilitza l'estàtica en els casos en què necessitem definir variables o mètodes comuns a tots els objectes de la classe.
Per exemple, a la classe que simula la col·lecció dels estudiants d'una universitat, el nom de la universitat és l'atribut comú a tots els estudiants. Per tant, el nom de la universitat es definirà com estàtica .
19) Quins són els avantatges dels paquets a Java?
Hi ha diversos avantatges de definir paquets en Java.
- Els paquets eviten els xocs de noms.
- El paquet proporciona un control d'accés més fàcil.
- També podem tenir les classes ocultes que no són visibles fora i utilitzades pel paquet.
- És més fàcil localitzar les classes relacionades.
20) Quina és la sortida del següent programa Java?
class Test { public static void main (String args[]) { System.out.println(10 + 20 + 'Javatpoint'); System.out.println('Javatpoint' + 10 + 20); } }
La sortida del codi anterior serà
30Javatpoint Javatpoint1020
Explicació
En el primer cas, 10 i 20 es tracten com a nombres i s'afegeixen a 30. Ara, la seva suma 30 es tracta com la cadena i es concatena amb la cadena. Javatpoint . Per tant, la sortida serà 30Javatpoint .
En el segon cas, la cadena Javatpoint es concatena amb 10 per ser la cadena Javatpoint10 que després es concatenarà amb 20 a ser Javatpoint1020 .
21) Quina és la sortida del següent programa Java?
class Test { public static void main (String args[]) { System.out.println(10 * 20 + 'Javatpoint'); System.out.println('Javatpoint' + 10 * 20); } }
La sortida del codi anterior serà
200Javatpoint Javatpoint200
Explicació
En el primer cas, primer es multiplicaran els números 10 i 20 i després el resultat 200 es tractarà com la cadena i es concatenarà amb la cadena. Javatpoint per produir la sortida 200Javatpoint .
En el segon cas, els números 10 i 20 es multiplicaran primer per ser 200 perquè la precedència de la multiplicació és superior a la suma. El resultat 200 es tractarà com la cadena i es concatenarà amb la cadena Javatpoint per produir la sortida com Javatpoint200 .
22) Quina és la sortida del següent programa Java?
class Test { public static void main (String args[]) { for(int i=0; 0; i++) { System.out.println('Hello Javatpoint'); } } }
El codi anterior donarà l'error en temps de compilació perquè el bucle for demana un valor booleà a la segona part i estem proporcionant un valor enter, és a dir, 0.
Conceptes bàsics de Java: OOPs: preguntes inicials d'entrevista de POO
Es donen més de 50 preguntes d'entrevista OOP (Programació i Sistema Orientats a Objectes). Tanmateix, s'han categoritzat en moltes seccions, com ara preguntes d'entrevista de constructor, preguntes d'entrevista estàtica, preguntes d'entrevista d'herència, pregunta d'entrevista d'abstracció, preguntes d'entrevista de polimorfisme, etc. per a una millor comprensió.
23) Què és el paradigma orientat a objectes?
És un paradigma de programació basat en objectes que tenen dades i mètodes definits a la classe a la qual pertany. El paradigma orientat a objectes pretén incorporar els avantatges de la modularitat i la reutilització. Els objectes són les instàncies de classes que interactuen entre si per dissenyar aplicacions i programes. Hi ha les següents característiques del paradigma orientat a objectes.
- Segueix l'enfocament de baix a dalt en el disseny del programa.
- Centra't en les dades amb mètodes per operar sobre les dades de l'objecte
- Inclou el concepte com l'encapsulació i l'abstracció que amaga les complexitats de l'usuari i només mostra la funcionalitat.
- Implementa l'enfocament en temps real com l'herència, l'abstracció, etc.
- Els exemples del paradigma orientat a objectes són C++, Simula, Smalltalk, Python, C#, etc.
24) Què és un objecte?
L'objecte és l'entitat en temps real que té algun estat i comportament. A Java, Object és una instància de la classe que té les variables d'instància com a estat de l'objecte i els mètodes com a comportament de l'objecte. L'objecte d'una classe es pot crear utilitzant el nou paraula clau.
25) Quina diferència hi ha entre un llenguatge de programació orientat a objectes i un llenguatge de programació basat en objectes?
Hi ha les següents diferències bàsiques entre el llenguatge orientat a objectes i el llenguatge basat en objectes.
- Els llenguatges orientats a objectes segueixen tots els conceptes de POO, mentre que el llenguatge basat en objectes no segueix tots els conceptes de POO com l'herència i el polimorfisme.
- Els llenguatges orientats a objectes no tenen els objectes integrats, mentre que els llenguatges basats en objectes tenen els objectes incorporats, per exemple, JavaScript té un objecte finestra.
- Exemples de programació orientada a objectes són Java, C#, Smalltalk, etc., mentre que els exemples de llenguatges basats en objectes són JavaScript, VBScript, etc.
26) Quin serà el valor inicial d'una referència d'objecte que es defineix com a variable d'instància?
Totes les referències d'objectes s'inicialitzen com a null a Java.
Conceptes bàsics de Java - OOPs: preguntes d'entrevista de constructors
27) Què és el constructor?
El constructor es pot definir com el tipus especial de mètode que s'utilitza per inicialitzar l'estat d'un objecte. S'invoca quan s'instancia la classe i s'assigna la memòria per a l'objecte. Cada vegada, es crea un objecte amb el nou paraula clau, s'anomena el constructor predeterminat de la classe. El nom del constructor ha de ser semblant al nom de la classe. El constructor no ha de tenir un tipus de retorn explícit.
Més detalls.28) Quants tipus de constructors s'utilitzen a Java?
En funció dels paràmetres passats als constructors, hi ha dos tipus de constructors a Java.
29) Quin és el propòsit d'un constructor predeterminat?
El propòsit del constructor per defecte és assignar el valor per defecte als objectes. El compilador java crea implícitament un constructor predeterminat si no hi ha cap constructor a la classe.
class Student3{ int id; String name; void display(){System.out.println(id+' '+name);} public static void main(String args[]){ Student3 s1=new Student3(); Student3 s2=new Student3(); s1.display(); s2.display(); } }Prova-ho ara
Sortida:
0 null 0 null
Explicació: A la classe anterior, no esteu creant cap constructor, de manera que el compilador us proporciona un constructor predeterminat. Aquí 0 i valors nuls es proporcionen per defecte del constructor.
Més detalls.
30) El constructor retorna algun valor?
Anys: sí, el constructor retorna implícitament la instància actual de la classe (no podeu utilitzar un tipus de retorn explícit amb el constructor). Més detalls.
31) El constructor s'hereta?
No, el constructor no s'hereta.
32) Pots fer un constructor final?
No, el constructor no pot ser definitiu.
aplicacions ocultes
33) Podem sobrecarregar els constructors?
Sí, els constructors es poden sobrecarregar canviant el nombre d'arguments acceptats pel constructor o canviant el tipus de dades dels paràmetres. Considereu l'exemple següent.
class Test { int i; public Test(int k) { i=k; } public Test(int k, int m) { System.out.println('Hi I am assigning the value max(k, m) to i'); if(k>m) { i=k; } else { i=m; } } } public class Main { public static void main (String args[]) { Test test1 = new Test(10); Test test2 = new Test(12, 15); System.out.println(test1.i); System.out.println(test2.i); } }
Al programa anterior, la prova del constructor està sobrecarregada amb un altre constructor. A la primera crida al constructor, s'anomena el constructor amb un argument, i s'inicializarà amb el valor 10. Tanmateix, a la segona crida al constructor, s'anomena el constructor amb els 2 arguments i s'inicializarà i amb el valor 15.
34) Què entens per constructor de còpies a Java?
No hi ha un constructor de còpia a Java. Tanmateix, podem copiar els valors d'un objecte a un altre com un constructor de còpia en C++.
Hi ha moltes maneres de copiar els valors d'un objecte a un altre a Java. Ells són:
- Per constructor
- Assignant els valors d'un objecte a un altre
- Mitjançant el mètode clone() de la classe Object
En aquest exemple, copiarem els valors d'un objecte en un altre mitjançant el constructor Java.
//Java program to initialize the values from one object to another class Student6{ int id; String name; //constructor to initialize integer and string Student6(int i,String n){ id = i; name = n; } //constructor to initialize another object Student6(Student6 s){ id = s.id; name =s.name; } void display(){System.out.println(id+' '+name);} public static void main(String args[]){ Student6 s1 = new Student6(111,'Karan'); Student6 s2 = new Student6(s1); s1.display(); s2.display(); } }Prova-ho ara
Sortida:
111 Karan 111 Karan
35) Quines diferències hi ha entre els constructors i els mètodes?
Hi ha moltes diferències entre constructors i mètodes. Es donen a continuació.
Constructor Java | Mètode Java |
---|---|
S'utilitza un constructor per inicialitzar l'estat d'un objecte. | S'utilitza un mètode per exposar el comportament d'un objecte. |
Un constructor no ha de tenir un tipus de retorn. | Un mètode ha de tenir un tipus de retorn. |
El constructor s'invoca implícitament. | El mètode s'invoca de manera explícita. |
El compilador Java proporciona un constructor predeterminat si no teniu cap constructor en una classe. | El compilador no proporciona el mètode en cap cas. |
El nom del constructor ha de ser el mateix que el nom de la classe. | El nom del mètode pot ser o no el mateix que el nom de la classe. |
36) Quina és la sortida del següent programa Java?
public class Test { Test(int a, int b) { System.out.println('a = '+a+' b = '+b); } Test(int a, float b) { System.out.println('a = '+a+' b = '+b); } public static void main (String args[]) { byte a = 10; byte b = 15; Test test = new Test(a,b); } }
La sortida del programa següent és:
a = 10 b = 15
Aquí, el tipus de dades de les variables a i b, és a dir, el byte es promou a int, i s'anomena el primer constructor parametritzat amb els dos paràmetres enters.
37) Quina és la sortida del següent programa Java?
class Test { int i; } public class Main { public static void main (String args[]) { Test test = new Test(); System.out.println(test.i); } }
La sortida del programa és 0 perquè la variable i està inicialitzada a 0 internament. Com sabem que s'invoca implícitament un constructor per defecte si no hi ha cap constructor a la classe, la variable i s'inicialitza a 0 ja que no hi ha cap constructor a la classe.
38) Quina és la sortida del següent programa Java?
class Test { int test_a, test_b; Test(int a, int b) { test_a = a; test_b = b; } public static void main (String args[]) { Test test = new Test(); System.out.println(test.test_a+' '+test.test_b); } }
Hi ha un error del compilador al programa perquè hi ha una crida al constructor predeterminat al mètode principal que no està present a la classe. Tanmateix, només hi ha un constructor parametritzat a la classe Test. Per tant, el constructor no invoca implícitament cap constructor predeterminat.
Conceptes bàsics de Java - OOPs: preguntes d'entrevista de paraula clau estàtica
39) Quina és la variable estàtica?
La variable estàtica s'utilitza per referir-se a la propietat comuna de tots els objectes (que no és única per a cada objecte), per exemple, el nom de l'empresa dels empleats, el nom de la universitat dels estudiants, etc. La variable estàtica només obté memòria una vegada a l'àrea de classe a les el temps de càrrega de la classe. L'ús d'una variable estàtica fa que el vostre programa sigui més eficient de la memòria (estalvia memòria). La variable estàtica pertany a la classe i no a l'objecte.
//Program of static variable class Student8{ int rollno; String name; static String college ='ITS'; Student8(int r,String n){ rollno = r; name = n; } void display (){System.out.println(rollno+' '+name+' '+college);} public static void main(String args[]){ Student8 s1 = new Student8(111,'Karan'); Student8 s2 = new Student8(222,'Aryan'); s1.display(); s2.display(); } }Prova-ho ara
Output:111 Karan ITS 222 Aryan ITS
Més detalls.
40) Què és el mètode estàtic?
- Un mètode estàtic pertany a la classe més que a l'objecte.
- No cal crear l'objecte per cridar els mètodes estàtics.
- Un mètode estàtic pot accedir i canviar el valor de la variable estàtica.
41) Quines són les restriccions que s'apliquen als mètodes estàtics de Java?
S'apliquen dues restriccions principals als mètodes estàtics.
- El mètode estàtic no pot utilitzar un membre de dades no estàtic ni trucar directament al mètode no estàtic.
- això i super no es poden utilitzar en un context estàtic, ja que no són estàtics.
42) Per què el mètode principal és estàtic?
Perquè l'objecte no és necessari per cridar el mètode estàtic. Si fem que el mètode principal no sigui estàtic, la JVM haurà de crear primer el seu objecte i després cridar al mètode main() que donarà lloc a l'assignació de memòria addicional. Més detalls.
43) Podem anul·lar els mètodes estàtics?
No, no podem anul·lar els mètodes estàtics.
44) Què és el bloc estàtic?
El bloc estàtic s'utilitza per inicialitzar el membre de dades estàtiques. S'executa abans del mètode principal, en el moment de la càrrega de classes.
class A2{ static{System.out.println('static block is invoked');} public static void main(String args[]){ System.out.println('Hello main'); } }Prova-ho ara
Output: static block is invoked Hello main
Més detalls.
45) Podem executar un programa sense el mètode main()?
Res) No, era possible abans de JDK 1.7 utilitzant el bloc estàtic. Des del JDK 1.7, no és possible. Més detalls.
46) Què passa si s'elimina el modificador estàtic de la signatura del mètode principal?
Es compila el programa. Tanmateix, en temps d'execució, genera un error 'NoSuchMethodError'.
47) Quina diferència hi ha entre el mètode estàtic (de classe) i el mètode d'instància?
mètode estàtic o de classe | mètode d'instància |
---|---|
1) Un mètode que es declara com a estàtic es coneix com a mètode estàtic. | Un mètode que no es declara com a estàtic es coneix com a mètode d'instància. |
2) No necessitem crear els objectes per cridar els mètodes estàtics. | L'objecte és necessari per cridar els mètodes d'instància. |
3) No es pot accedir directament als membres no estàtics (instància) en el context estàtic (mètode estàtic, bloc estàtic i classe imbricada estàtica). | Es pot accedir a les variables estàtiques i no estàtiques amb mètodes d'instància. |
4) Per exemple: public static int cube(int n){ return n*n*n;} | Per exemple: public void msg(){...}. |
48) Podem fer que els constructors estiguin?
Com sabem que el context estàtic (mètode, bloc o variable) pertany a la classe, no a l'objecte. Com que els constructors només s'invoquen quan es crea l'objecte, no té sentit fer-los estàtics. Tanmateix, si intenteu fer-ho, el compilador mostrarà l'error del compilador.
49) Podem fer que els mètodes abstractes estiguin en Java?
A Java, si fem els mètodes abstractes estàtics, es convertirà en la part de la classe, i podrem anomenar-lo directament que és innecessari. Cridar un mètode no definit és completament inútil, per tant, no està permès.
50) Podem declarar les variables estàtiques i els mètodes en una classe abstracta?
Sí, podem declarar variables estàtiques i mètodes en un mètode abstracte. Com sabem que no hi ha cap requisit per fer que l'objecte accedeixi al context estàtic, per tant, podem accedir al context estàtic declarat dins de la classe abstracta utilitzant el nom de la classe abstracta. Considereu l'exemple següent.
abstract class Test { static int i = 102; static void TestMethod() { System.out.println('hi !! I am good !!'); } } public class TestClass extends Test { public static void main (String args[]) { Test.TestMethod(); System.out.println('i = '+Test.i); } }
Sortida
hi !! I am good !! i = 102
Conceptes bàsics de Java - OOPs: preguntes d'entrevista d'herència
51) Què és això paraula clau en java?
El això La paraula clau és una variable de referència que fa referència a l'objecte actual. Hi ha els diferents usos d'aquesta paraula clau a Java. Es pot utilitzar per referir-se a propietats de classe actuals, com ara mètodes d'instància, variables, constructors, etc. També es pot passar com a argument als mètodes o als constructors. També es pot retornar des del mètode com a instància de classe actual.
Més detalls.
52) Quins són els principals usos d'aquesta paraula clau?
Hi ha els següents usos de això paraula clau.
53) Podem assignar la referència a això variable?
No, això no es pot assignar a cap valor perquè sempre apunta a l'objecte de classe actual i aquesta és la referència final a Java. Tanmateix, si intentem fer-ho, es mostrarà l'error del compilador. Considereu l'exemple següent.
public class Test { public Test() { this = null; System.out.println('Test class constructor called'); } public static void main (String args[]) { Test t = new Test(); } }
Sortida
Test.java:5: error: cannot assign a value to final variable this this = null; ^ 1 error
54) Can això s'utilitzarà la paraula clau per referir membres estàtics?
Sí, és possible utilitzar aquesta paraula clau per referir membres estàtics perquè només és una variable de referència que fa referència a l'objecte de classe actual. Tanmateix, com ho sabem, no és necessari accedir a variables estàtiques mitjançant objectes, per tant, no és la millor pràctica utilitzar-ho per referir membres estàtics. Considereu l'exemple següent.
public class Test { static int i = 10; public Test () { System.out.println(this.i); } public static void main (String args[]) { Test t = new Test(); } }
Sortida
10
55) Com es pot fer l'encadenament del constructor amb aquesta paraula clau?
L'encadenament de constructors ens permet cridar un constructor des d'un altre constructor de la classe respecte a l'objecte de classe actual. Podem utilitzar aquesta paraula clau per realitzar un encadenament de constructors dins de la mateixa classe. Considereu l'exemple següent que il·lustra com podem utilitzar aquesta paraula clau per aconseguir l'encadenament del constructor.
public class Employee { int id,age; String name, address; public Employee (int age) { this.age = age; } public Employee(int id, int age) { this(age); this.id = id; } public Employee(int id, int age, String name, String address) { this(id, age); this.name = name; this.address = address; } public static void main (String args[]) { Employee emp = new Employee(105, 22, 'Vikas', 'Delhi'); System.out.println('ID: '+emp.id+' Name:'+emp.name+' age:'+emp.age+' address: '+emp.address); } }
Sortida
ID: 105 Name:Vikas age:22 address: Delhi
56) Quins són els avantatges de passar això a un mètode en lloc de l'objecte de classe actual?
Com sabem, que es refereix a l'objecte de classe actual, per tant, ha de ser similar a l'objecte de classe actual. Tanmateix, hi pot haver dos avantatges principals de passar això a un mètode en lloc de l'objecte de classe actual.
- aquesta és una variable final. Per tant, això no es pot assignar a cap valor nou, mentre que l'objecte de classe actual podria no ser definitiu i es pot canviar.
- això es pot utilitzar al bloc sincronitzat.
57) Què és l'herència?
L'herència és un mecanisme pel qual un objecte adquireix totes les propietats i el comportament d'un altre objecte d'una altra classe. S'utilitza per a la reutilització del codi i la substitució de mètodes. La idea darrere de l'herència a Java és que podeu crear noves classes que es construeixin a partir de classes existents. Quan hereteu d'una classe existent, podeu reutilitzar mètodes i camps de la classe pare. A més, també podeu afegir nous mètodes i camps a la vostra classe actual. L'herència representa la relació IS-A que també es coneix com a relació pare-fill.
Hi ha cinc tipus d'herència a Java.
- Herència d'un sol nivell
- Herència multinivell
- Herència múltiple
- Herència jeràrquica
- Herència híbrida
L'herència múltiple no s'admet a Java mitjançant classe.
Més detalls.58) Per què s'utilitza l'herència a Java?
Hi ha diversos avantatges d'utilitzar l'herència a Java que es detallen a continuació.
- L'herència proporciona la reutilització del codi. La classe derivada no necessita redefinir el mètode de la classe base tret que hagi de proporcionar la implementació específica del mètode.
- El polimorfisme en temps d'execució no es pot aconseguir sense utilitzar l'herència.
- Podem simular l'herència de classes amb els objectes en temps real, cosa que fa que els POO siguin més realistes.
- L'herència ofereix l'amagat de dades. La classe base pot ocultar algunes dades de la classe derivada fent-la privada.
- La substitució del mètode no es pot aconseguir sense herència. Mitjançant la substitució del mètode, podem donar una implementació específica d'algun mètode bàsic contingut per la classe base.
59) Quina classe és la superclasse de totes les classes?
La classe d'objecte és la superclasse de totes les altres classes de Java.
60) Per què no s'admet l'herència múltiple a Java?
Per reduir la complexitat i simplificar el llenguatge, java no admet l'herència múltiple. Considereu un escenari on A, B i C són tres classes. La classe C hereta les classes A i B. Si les classes A i B tenen el mateix mètode i l'anomeneu des de l'objecte de classe fill, hi haurà ambigüitat per cridar el mètode de la classe A o B.
Com que els errors en temps de compilació són millors que els errors en temps d'execució, Java mostra un error en temps de compilació si hereteu 2 classes. Així, tant si teniu el mateix mètode com si teniu un mètode diferent, hi haurà un error de temps de compilació.
class A{ void msg(){System.out.println('Hello');} } class B{ void msg(){System.out.println('Welcome');} } class C extends A,B{//suppose if it were Public Static void main(String args[]){ C obj=new C(); obj.msg();//Now which msg() method would be invoked? } }Prova-ho ara
Compile Time Error
61) Què és l'agregació?
L'agregació es pot definir com la relació entre dues classes on la classe agregada conté una referència a la classe que té. L'agregació es descriu millor com a té relació. Per exemple, La classe agregada Empleat que té diversos camps com ara l'edat, el nom i el sou també conté un objecte de la classe Adreça que té diversos camps com ara Adreça-Línia 1, Ciutat, Estat i codi PIN. En altres paraules, podem dir que Employee (classe) té un objecte de classe Address. Considereu l'exemple següent.
Address.java
public class Address { String city,state,country; public Address(String city, String state, String country) { this.city = city; this.state = state; this.country = country; } }
Employee.java
public class Emp { int id; String name; Address address; public Emp(int id, String name,Address address) { this.id = id; this.name = name; this.address=address; } void display(){ System.out.println(id+' '+name); System.out.println(address.city+' '+address.state+' '+address.country); } public static void main(String[] args) { Address address1=new Address('gzb','UP','india'); Address address2=new Address('gno','UP','india'); Emp e=new Emp(111,'varun',address1); Emp e2=new Emp(112,'arun',address2); e.display(); e2.display(); } }
Sortida
111 varun gzb UP india 112 arun gno UP india
62) Què és la composició?
Mantenir la referència d'una classe dins d'una altra classe es coneix com a composició. Quan un objecte conté l'altre objecte, si l'objecte contingut no pot existir sense l'existència d'un objecte contenidor, s'anomena composició. En altres paraules, podem dir que la composició és el cas particular d'agregació que representa una relació més forta entre dos objectes. Exemple: una classe conté alumnes. Un alumne no pot existir sense classe. Hi ha composició entre classe i alumnes.
63) Quina diferència hi ha entre l'agregació i la composició?
L'agregació representa la relació feble mentre que la composició representa la relació forta. Per exemple, la bicicleta té un indicador (agregació), però la bicicleta té un motor (composició).
64) Per què Java no admet punters?
El punter és una variable que fa referència a l'adreça de memòria. No s'utilitzen a Java perquè són insegurs (no segurs) i complexos d'entendre.
65) Què és súper a Java?
El súper La paraula clau a Java és una variable de referència que s'utilitza per referir-se a l'objecte de classe pare immediat. Sempre que creeu la instància de la subclasse, es crea implícitament una instància de la classe pare a la qual es fa referència per una variable de superreferència. El compilador crida implícitament el super() al constructor de classes si no hi ha super o això.
class Animal{ Animal(){System.out.println('animal is created');} } class Dog extends Animal{ Dog(){ System.out.println('dog is created'); } } class TestSuper4{ public static void main(String args[]){ Dog d=new Dog(); } }Prova-ho ara
Sortida:
animal is created dog is createdMés detalls.
66) Com es pot fer l'encadenament del constructor utilitzant la paraula clau super?
class Person { String name,address; int age; public Person(int age, String name, String address) { this.age = age; this.name = name; this.address = address; } } class Employee extends Person { float salary; public Employee(int age, String name, String address, float salary) { super(age,name,address); this.salary = salary; } } public class Test { public static void main (String args[]) { Employee e = new Employee(22, 'Mukesh', 'Delhi', 90000); System.out.println('Name: '+e.name+' Salary: '+e.salary+' Age: '+e.age+' Address: '+e.address); } }
Sortida
Name: Mukesh Salary: 90000.0 Age: 22 Address: Delhi
67) Quins són els principals usos de la paraula clau super?
Hi ha els següents usos de la paraula clau super.
- super es pot utilitzar per fer referència a la variable d'instància de classe pare immediata.
- super es pot utilitzar per invocar el mètode de classe pare immediata.
- super() es pot utilitzar per invocar el constructor de classe pare immediat.
68) Quines diferències hi ha entre aquesta i la súper paraula clau?
Hi ha les següents diferències entre aquesta i la super paraula clau.
- La paraula clau super sempre apunta als contextos de classe pare, mentre que aquesta paraula clau sempre apunta al context de classe actual.
- La paraula clau super s'utilitza principalment per inicialitzar les variables de classe base dins del constructor de classes derivats, mentre que aquesta paraula clau s'utilitza principalment per diferenciar entre variables locals i d'instància quan es passa al constructor de classes.
- El super i aquesta ha de ser la primera instrucció dins del constructor, en cas contrari, el compilador llançarà un error.
69) Quina és la sortida del següent programa Java?
class Person { public Person() { System.out.println('Person class constructor called'); } } public class Employee extends Person { public Employee() { System.out.println('Employee class constructor called'); } public static void main (String args[]) { Employee e = new Employee(); } }
Sortida
Person class constructor called Employee class constructor called
Explicació
El compilador invoca implícitament el super() si no s'inclou cap super() o this() explícitament dins del constructor de classes derivats. Per tant, en aquest cas, primer es crida al constructor de la classe Persona i després al constructor de la classe Employee.
70) Podeu utilitzar això () i super () tots dos en un constructor?
No, perquè this() i super() han de ser la primera instrucció del constructor de classes.
Exemple:
public class Test{ Test() { super(); this(); System.out.println('Test class object is created'); } public static void main(String []args){ Test t = new Test(); } }
Sortida:
Test.java:5: error: call to this must be first statement in constructor
71) Què és la clonació d'objectes?
La clonació d'objectes s'utilitza per crear la còpia exacta d'un objecte. El mètode clone() de la classe Object s'utilitza per clonar un objecte. El java.lang.Cloneable La interfície ha de ser implementada per la classe el clon d'objectes de la qual volem crear. Si no implementem la interfície Cloneable, el mètode clone() genera CloneNotSupportedException.
protected Object clone() throws CloneNotSupportedExceptionMés detalls.
Conceptes bàsics de Java - OOPs: preguntes d'entrevista de sobrecàrrega de mètodes
72) Què és la sobrecàrrega de mètodes?
La sobrecàrrega de mètodes és la tècnica del polimorfisme que ens permet crear diversos mètodes amb el mateix nom però signatura diferent. Podem aconseguir la sobrecàrrega de mètodes de dues maneres.
- Canviant el nombre d'arguments
- Canviant el tipus de dades dels arguments
La sobrecàrrega de mètodes augmenta la llegibilitat del programa. La sobrecàrrega del mètode es realitza per esbrinar el programa ràpidament.
Més detalls.73) Per què no és possible la sobrecàrrega del mètode canviant el tipus de retorn a Java?
A Java, la sobrecàrrega de mètodes no és possible canviant el tipus de retorn del programa per evitar l'ambigüitat.
class Adder{ static int add(int a,int b){return a+b;} static double add(int a,int b){return a+b;} } class TestOverloading3{ public static void main(String[] args){ System.out.println(Adder.add(11,11));//ambiguity }}Prova-ho ara
Sortida:
Compile Time Error: method add(int, int) is already defined in class AdderMés detalls.
74) Podem sobrecarregar els mètodes fent-los estàtics?
No, no podem sobrecarregar els mètodes només aplicant-hi la paraula clau estàtica (el nombre de paràmetres i tipus són els mateixos). Considereu l'exemple següent.
public class Animal { void consume(int a) { System.out.println(a+' consumed!!'); } static void consume(int a) { System.out.println('consumed static '+a); } public static void main (String args[]) { Animal a = new Animal(); a.consume(10); Animal.consume(20); } }
Sortida
Animal.java:7: error: method consume(int) is already defined in class Animal static void consume(int a) ^ Animal.java:15: error: non-static method consume(int) cannot be referenced from a static context Animal.consume(20); ^ 2 errors
75) Podem sobrecarregar el mètode main()?
Sí, podem tenir qualsevol nombre de mètodes principals en un programa Java mitjançant la sobrecàrrega de mètodes.
Més detalls.76) Què és la sobrecàrrega de mètodes amb la promoció de tipus?
La promoció per tipus és una sobrecàrrega de mètodes, volem dir que un tipus de dades es pot promocionar a un altre de manera implícita si no es troba cap coincidència exacta.
Tal com es mostra al diagrama anterior, el byte es pot ascendir a curt, int, llarg, flotant o doble. El tipus de dades curt es pot promocionar a int, long, float o double. El tipus de dades char es pot promocionar a int, long, float o double, etc. Considereu l'exemple següent.
class OverloadingCalculation1{ void sum(int a,long b){System.out.println(a+b);} void sum(int a,int b,int c){System.out.println(a+b+c);} public static void main(String args[]){ OverloadingCalculation1 obj=new OverloadingCalculation1(); obj.sum(20,20);//now second int literal will be promoted to long obj.sum(20,20,20); } }Prova-ho ara
Sortida
40 60
77) Quina és la sortida del següent programa Java?
class OverloadingCalculation3{ void sum(int a,long b){System.out.println('a method invoked');} void sum(long a,int b){System.out.println('b method invoked');} public static void main(String args[]){ OverloadingCalculation3 obj=new OverloadingCalculation3(); obj.sum(20,20);//now ambiguity } }
Sortida
OverloadingCalculation3.java:7: error: reference to sum is ambiguous obj.sum(20,20);//now ambiguity ^ both method sum(int,long) in OverloadingCalculation3 and method sum(long,int) in OverloadingCalculation3 match 1 error
Explicació
Hi ha dos mètodes definits amb el mateix nom, és a dir, suma. El primer mètode accepta el tipus sencer i llarg, mentre que el segon mètode accepta el tipus llarg i sencer. Els paràmetres passats són a = 20, b = 20. No podem dir quin mètode s'anomenarà ja que no s'esmenta una diferenciació clara entre el literal sencer i el literal llarg. Aquest és el cas de l'ambigüitat. Per tant, el compilador llançarà un error.
Conceptes bàsics de Java - OOPs: mètode que anul·la les preguntes d'entrevista
78) Què és la substitució del mètode:
Si una subclasse proporciona una implementació específica d'un mètode que ja proporciona la seva classe pare, es coneix com a substitució de mètodes. S'utilitza per al polimorfisme en temps d'execució i per implementar els mètodes d'interfície.
Regles per a la substitució del mètode
- El mètode ha de tenir el mateix nom que a la classe pare.
- El mètode ha de tenir la mateixa signatura que a la classe pare.
- Dues classes han de tenir una relació IS-A entre elles.
79) Podem anul·lar el mètode estàtic?
No, no podeu anul·lar el mètode estàtic perquè són la part de la classe, no l'objecte.
80) Per què no podem anul·lar el mètode estàtic?
Es deu al fet que el mètode estàtic és la part de la classe i està lligat a la classe, mentre que el mètode d'instància està lligat a l'objecte, i l'estàtic obté memòria a l'àrea de classe i la instància obté memòria en un munt.
81) Podem anul·lar el mètode sobrecarregat?
Sí.
82) Diferència entre mètode Overloading i Overriding.
Sobrecàrrega del mètode | Anulació del mètode |
---|---|
1) La sobrecàrrega de mètodes augmenta la llegibilitat del programa. | La substitució de mètodes proporciona la implementació específica del mètode que ja proporciona la seva superclasse. |
2) La sobrecàrrega de mètodes es produeix dins de la classe. | La substitució del mètode es produeix en dues classes que tenen una relació IS-A entre elles. |
3) En aquest cas, els paràmetres han de ser diferents. | En aquest cas, els paràmetres han de ser els mateixos. |
83) Podem anul·lar els mètodes privats?
No, no podem anul·lar els mètodes privats perquè l'abast dels mètodes privats està limitat a la classe i no hi podem accedir fora de la classe.
84) Podem canviar l'abast del mètode anul·lat a la subclasse?
Sí, podem canviar l'abast del mètode anul·lat a la subclasse. Tanmateix, hem de notar que no podem disminuir l'accessibilitat del mètode. S'ha de tenir en compte el punt següent mentre es canvia l'accessibilitat del mètode.
- El privat es pot canviar a protegit, públic o predeterminat.
- El protegit es pot canviar a públic o predeterminat.
- El valor predeterminat es pot canviar a públic.
- El públic continuarà sent públic.
85) Podem modificar la clàusula throws del mètode de la superclasse mentre la anul·lem a la subclasse?
Sí, podem modificar la clàusula throws del mètode de la superclasse mentre la substituïm a la subclasse. Tanmateix, hi ha algunes regles que s'han de seguir mentre anul·len en cas de maneig d'excepcions.
- Si el mètode de la superclasse no declara una excepció, el mètode anul·lat de subclasse no pot declarar l'excepció marcada, però pot declarar l'excepció no marcada.
- Si el mètode de la superclasse declara una excepció, el mètode anul·lat de subclasse pot declarar la mateixa, excepció de subclasse o cap excepció, però no pot declarar excepció principal.
86) Quina és la sortida del següent programa Java?
class Base { void method(int a) { System.out.println('Base class method called with integer a = '+a); } void method(double d) { System.out.println('Base class method called with double d ='+d); } } class Derived extends Base { @Override void method(double d) { System.out.println('Derived class method called with double d ='+d); } } public class Main { public static void main(String[] args) { new Derived().method(10); } }
Sortida
Base class method called with integer a = 10
Explicació
El method() està sobrecarregat a la classe Base mentre que es deriva a la classe Derived amb el tipus doble com a paràmetre. A la crida al mètode, es passa l'enter.
87) Podeu tenir funcions virtuals a Java?
Sí, totes les funcions de Java són virtuals per defecte.
88) Què és el tipus de retorn covariant?
Ara, des de java5, és possible anul·lar qualsevol mètode canviant el tipus de retorn si el tipus de retorn del mètode de substitució de la subclasse és el tipus de subclasse. Es coneix com a tipus de retorn covariant. El tipus de retorn covariant especifica que el tipus de retorn pot variar en la mateixa direcció que la subclasse.
class A{ A get(){return this;} } class B1 extends A{ B1 get(){return this;} void message(){System.out.println('welcome to covariant return type');} public static void main(String args[]){ new B1().get().message(); } }Prova-ho ara
Output: welcome to covariant return typeMés detalls.
89) Quina és la sortida del següent programa Java?
class Base { public void baseMethod() { System.out.println('BaseMethod called ...'); } } class Derived extends Base { public void baseMethod() { System.out.println('Derived method called ...'); } } public class Test { public static void main (String args[]) { Base b = new Derived(); b.baseMethod(); } }
Sortida
Derived method called ...
Explicació
El mètode de la classe Base, és a dir, baseMethod() es substitueix a la classe derivada. A la classe Test, la variable de referència b (de tipus Classe base) fa referència a la instància de la classe Derivada. Aquí, el polimorfisme en temps d'execució s'aconsegueix entre la classe Base i Derivada. En temps de compilació, la presència del mètode baseMethod es va comprovar a la classe base, si és present, el programa compilat en cas contrari es mostrarà l'error del compilador. En aquest cas, baseMethod està present a la classe Base; per tant, es compila correctament. Tanmateix, en temps d'execució, comprova si la classe derivada ha substituït el mètode base, si és així, s'anomena el mètode de classe derivada, en cas contrari es crida el mètode de classe base. En aquest cas, la classe Derived substitueix el baseMethod; per tant, s'anomena el mètode de classe derivada.
Conceptes bàsics de Java - POO: paraules clau final Preguntes d'entrevista
90) Quina és la variable final?
A Java, la variable final s'utilitza per restringir que l'usuari l'actualitzi. Si inicialitzem la variable final, no podem canviar-ne el valor. En altres paraules, podem dir que la variable final una vegada assignada a un valor, no es pot canviar mai després. La variable final que no està assignada a cap valor només es pot assignar mitjançant el constructor de classes.
class Bike9{ final int speedlimit=90;//final variable void run(){ speedlimit=400; } public static void main(String args[]){ Bike9 obj=new Bike9(); obj.run(); } }//end of classProva-ho ara
Output:Compile Time ErrorMés detalls.
91) Quin és el mètode final?
Si canviem qualsevol mètode per un mètode final, no el podem anul·lar. Més detalls.
class Bike{ final void run(){System.out.println('running');} } class Honda extends Bike{ void run(){System.out.println('running safely with 100kmph');} public static void main(String args[]){ Honda honda= new Honda(); honda.run(); } }Prova-ho ara
Output:Compile Time Error
92) Quina és la classe final?
Si fem una classe final, no la podrem heretar a cap de les subclasses.
final class Bike{} class Honda1 extends Bike{ void run(){System.out.println('running safely with 100kmph');} public static void main(String args[]){ Honda1 honda= new Honda1(); honda.run(); } }Prova-ho ara
Output:Compile Time ErrorMés detalls.
93) Quina és la variable en blanc final?
Una variable final, no inicialitzada en el moment de la declaració, es coneix com a variable en blanc final. No podem inicialitzar directament la variable en blanc final. En comptes d'això, l'hem d'inicialitzar mitjançant el constructor de classes. És útil en el cas que l'usuari disposa d'unes dades que no han de ser modificades per altres, per exemple, Número PAN. Considereu l'exemple següent:
class Student{ int id; String name; final String PAN_CARD_NUMBER; ... }Més detalls.
94) Podem inicialitzar la variable en blanc final?
Sí, si no és estàtic, podem inicialitzar-lo al constructor. Si és una variable final en blanc estàtica, només es pot inicialitzar al bloc estàtic. Més detalls.
95) Pots declarar el mètode principal com a final?
Sí, podem declarar el mètode principal com a public static final void main(String[] args){}.
96) Quina és la sortida del següent programa Java?
class Main { public static void main(String args[]){ final int i; i = 20; System.out.println(i); } }
Sortida
20
Explicació
Com que i és la variable final en blanc. Només es pot inicialitzar una vegada. L'hem inicialitzat a 20. Per tant, s'imprimiran 20.
97) Quina és la sortida del següent programa Java?
class Base { protected final void getInfo() { System.out.println('method of Base class'); } } public class Derived extends Base { protected final void getInfo() { System.out.println('method of Derived class'); } public static void main(String[] args) { Base obj = new Base(); obj.getInfo(); } }
Sortida
Derived.java:11: error: getInfo() in Derived cannot override getInfo() in Base protected final void getInfo() ^ overridden method is final 1 error
Explicació
El mètode getDetails() és final; per tant, no es pot anul·lar a la subclasse.
98) Podem declarar un constructor com a final?
El constructor mai es pot declarar com a final perquè mai s'hereta. Els constructors no són mètodes habituals; per tant, no té sentit declarar els constructors com a finals. Tanmateix, si intenteu fer-ho, el compilador llançarà un error.
99) Podem declarar una interfície com a definitiva?
No, no podem declarar una interfície com a final perquè la interfície ha de ser implementada per alguna classe per proporcionar la seva definició. Per tant, no té sentit fer una interfície definitiva. Tanmateix, si intenteu fer-ho, el compilador mostrarà un error.
100) Quina diferència hi ha entre el mètode final i el mètode abstracte?
La principal diferència entre el mètode final i el mètode abstracte és que el mètode abstracte no pot ser final, ja que els hem d'anul·lar a la subclasse per donar-ne la definició.