Al mirar los videos de Gcreddy puedes aprender por tu cuenta.
Java OOPS (Sistema de Programación Orientada a Objetos)
Declaraciones de Java OOPS
Fundamentos de OOPS
i) Herencia
ii) polimorfismo
iii) abstracción
iv) encapsulación
i) Herencia
> Es un proceso de herencia (reutilización) de los miembros de la clase (variables y métodos) de una clase a otra.
> La Clase en la que se heredan los miembros de la clase se denomina Super Clase / Clase principal / Clase base
> La Clase a la que se heredan los miembros de la clase se denomina Subclase / Clase secundaria / Clase derivada.
> La herencia entre la Superclase y la Subclase se logra usando la palabra clave “extiende”.
Estática vs. Métodos no estáticos
> Las variables de instancia no se pueden usar en métodos estáticos, pero podemos usar variables estáticas y de instancia en
Métodos no estáticos.
> Los métodos no estáticos no se pueden llamar dentro de los métodos estáticos, pero podemos llamar estáticos y no estáticos
Métodos dentro de los métodos no estáticos.
Ejemplo:
clase pública clase 1 {
// Variable Estática
estática int a = 10;
//Instancia variable
int b = 20;
// Método estático
vacío estático público abc () {
System.out.println (a);
}
// Método no estático
vacío público abc2 () {
System.out.println (a + b);
}
vacío estático público abc3 () {
System.out.println (“Es un método estático”);
// abc2 ();
a B C();
}
vacío público abc4 () {
System.out.println (“Es un método no estático”);
a B C();
abc2 ();
}
public static void main (String [] args) {
a B C();
abc3 ();
Class1 obj = new Class1 ();
obj.abc2 ();
obj.abc4 ();
}
}
Tipos de herencia
i) Herencia única
Ex:
ClassB extiende ClassA
ClassA – Super Class
ClassB – Sub Class
ii) Herencia multinivel
ClassB extiende ClassA
ClassC extiende ClassB
ClassC – Subclase / Clase de niño
ClassB – Parent for ClassC, Child Class for ClassA
ClassA – Parent for ClassB, Grand Parent for ClassC
iii) Herencia múltiple (* Java no admite herencia múltiple)
Ex:
ClassB extiende ClassA
ClassB extiende ClassD
Ejemplos:
clase pública clase 1 {
int a = 10;
int b = 20;
public void add () {
System.out.println (a + b);
}
public static void main (String [] args) {
Class1 obj = new Class1 ();
obj.add ();
System.out.println (obj.a);
int res = obj.b;
System.out.println (res);
}
}
Clase 2 (Reutilizando a los padres miembros de la clase con herencia)
clase pública clase 2 extiende clase 1 {
public static void main (String [] args) {
Class2 xyz = new Class2 ();
xyz.add ();
int x = xyz.b;
System.out.println (x);
}
}
Clase 2 (Reutilizando a los padres miembros de la clase sin herencia)
clase pública clase 2 {
public static void main (String [] args) {
Class1 xyz = new Class1 ();
xyz.add ();
int x = xyz.b;
System.out.println (x);
}
}
clase pública clase 2 extiende clase 1 {
int a = 5;
int b = 7;
/ * public void add () {
System.out.println (a + b);
} * /
público vacío multiplicar () {
System.out.println (a * b);
}
public static void main (String [] args) {
Class2 xyz = new Class2 ();
xyz.add ();
xyz.multiply ();
int x = xyz.b;
System.out.println (x);
}
}
1) Dos clases en el mismo paquete / proyecto
proyecto: proyecto1
paquete: abcd
clases: Class1, Class2
2) Dos clases en dos paquetes diferentes en el mismo proyecto
proyecto: proyecto1
paquetes: abcd, xyz
clases: Class1 (abcd), Class2 (xyz)
3) Dos clases en dos paquetes diferentes en proyectos diferentes
proyecto: proyecto1, proyecto2
paquetes: abcd (proyecto1), abcd2 (proyecto2)
clases: Class1 (abcd / project1), Class2 (abcd2 / project2)
Reutilizando miembros de clase de otro paquete en el mismo proyecto
paquete xyz;
importar abcd.Class1;
clase pública clase 2 extiende clase 1 {
public static void main (String [] args) {
Class2 obj = new Class2 ();
obj.add ();
int x = obj.b;
System.out.println (x);
}
Reutilizando miembros de la clase de otro paquete en otro proyecto
clase pública clase 3 extiende clase 1 {
public static void main (String [] args) {
Class3 abc = new Class3 ();
abc.add ();
int x = abc.b;
System.out.println (x);
}
}
Herencia Multi Nivel
Clase 1:
clase pública clase A
int a = 10;
int b = 20;
public void add () {
System.out.println (a + b);
}
public static void main (String [] args) {
ClassA obj1 = new ClassA ();
obj1.add ();
}
}
Clase 2:
clase pública ClassB extiende ClassA {
int a = 1;
int b = 2;
public void add () {
System.out.println (a + b);
}
public static void main (String [] args) {
ClassB obj2 = new ClassB ();
obj2.add ();
}
}
Clase 3:
clase pública ClassC extiende ClassB {
int a = 100;
int b = 200;
public void add () {
System.out.println (a + b);
}
public static void main (String [] args) {
ClassC obj3 = new ClassC ();
obj3.add ();
}
}
clase pública ClassC extiende ClassB {
int a = 100;
int b = 200;
public void add3 () {
System.out.println (a + b);
}
public static void main (String [] args) {
ClassC obj3 = new ClassC ();
obj3.add1 (); // 30
obj3.add2 (); // 3
obj3.add3 (); // 300
}
}
ii) polimorfismo
Existencia de comportamiento del objeto en muchas formas.
Dos tipos de polimorfismo
1) compile Time Polymorphism / Method OverLoading
2) Polimorfismo en tiempo de ejecución / Anulación del método
1) Polimorfismo de tiempo de compilación / OverLoading de método
Si hay dos o más métodos con el mismo nombre en la misma clase pero difieren de las siguientes maneras.
a) Número de argumentos
b) Tipo de Argumentos
Ejemplo para el método OverLoading
add público vacío (int a, int b) {
System.out.println (a + b);
}
public void add (int a, int b, int c) {
System.out.println (a + b + c);
}
Añadir público vacío (doble a, doble b) {
System.out.println (a + b);
}
public static void main (String [] args) {
Class1 obj = new Class1 ();
obj.add (1.234, 3.456);
obj.add (10,20,30);
obj.add (10,20);
}
}
2) Polimorfismo en tiempo de ejecución / Anulación del método
Si hay dos o más métodos con el mismo nombre disponibles en la Superclase y la Subclase
Ejemplo para anular el método
Clase 1:
clase pública clase 1 {
int a = 10, b = 20;
public void add () {
System.out.println (a + b);
}
public static void main (String [] args) {
}
}
Clase 2:
clase pública clase 2 extiende clase 1 {
int a = 100, b = 200;
public void add () {
System.out.println (a + b);
}
public static void main (String [] args) {
Class2 obj = new Class2 ();
obj.add (); // 300
Class1 obj2 = new Class1 ();
obj2.add (); // 30
}
}