Classes internas em Java

Exploraremos classes internas de Java com exemplos no tópico de hoje para atender às necessidades dos alunos com mais eficiência.

Classes Internas Java

Java também suporta classes de aninhamento (classes dentro de classes). Com classes internas Java , o aninhamento é usado para agrupar classes relacionadas , o que melhora a legibilidade e a capacidade de manutenção do código.

Criar um objeto de classe externa e, em seguida, criar um objeto de classe interna é a etapa inicial para acessar a classe interna:

Example: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class OuterClass{
String OuterClass_bio="This is an Outer Class Attribute";
class InnerClass{
String InnerClass_bio="This is an Inner Class Attribute";
}
}
public class Main {
public static void main(String[] args) {
OuterClass my_OuterClass_Obj=new OuterClass();
OuterClass.InnerClass my_InnerClass_Obj=my_OuterClass_Obj.new InnerClass();
System.out.println("OuterClass value: "+my_OuterClass_Obj.OuterClass_bio);
System.out.println("InnerClass value: "+my_InnerClass_Obj.InnerClass_bio);
}
// Output 1: OuterClass value: This is an Outer Class Attribute
// Output 2: InnerClass value: This is an Inner Class Attribute
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Another Example: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class Outer_Class{
int mrx_outer=3;
class Inner_Class{
int ample_inner=13;
}
}
public class Main {
public static void main(String[] args) {
Outer_Class my_OuterClass_Obj=new Outer_Class();
Outer_Class.Inner_Class my_InnerClass_Obj=my_OuterClass_Obj.new Inner_Class();
System.out.println("Product of Inner and Outer class attribute: "+(my_OuterClass_Obj.mrx_outer*my_InnerClass_Obj.ample_inner));
}
// Output : Product of Inner and Outer class attribute: 39
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX


Classe Interna Privada

As classes Java Inner podem ser privadas ou protegidas , ao contrário das classes regulares.

Declare a classe interna como privada se não quiser que objetos externos a acessem:

Se você tentar acessar uma classe interna privada de uma classe externa (MyMainClass), ocorrerá um erro:

Example: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Outer_Class{
int ample=40;
private class Inner_Class{
int mrx=20;
}
}
public class Main {
public static void main(String[] args) {
Outer_Class my_Obj1=new Outer_Class();
Outer_Class.Inner_Class my_Obj2=my_Obj1.new Inner_Class();
System.out.println("Difference: "+(my_Obj1.ample- my_Obj2.mrx));
}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

 

java: Outer_Class.Inner_class has private access in Outer_Class
Outer_Class.Inner_Class my_Obj2 = my_Obj1.new Inner_Class();

Another Example: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Outer_Class{
String mrx_name="James Gosling";
private class Inner_Class{
int ample_age=67;
}
}
public class Main {
public static void main(String[] args) {
Outer_Class my_Obj1=new Outer_Class();
Outer_Class.Inner_Class my_Obj2=my_Obj1.new Inner_Class();
System.out.println("Name: "+my_Obj1.mrx_name+"\nAge: "+my_Obj2.ample_age);
}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
java: Outer_Class.Inner_Class has private access in Outer_Class

Classe Interna Estática

Na classe interna do Java, você também pode acessá-la sem criar um objeto da classe externa:

Example: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class O_Class{
int mrx=16;
static class I_Class{
int ample=6;
}
}
public class Main {
public static void main(String[] args) {
O_Class.I_Class obj1=new O_Class.I_Class();
System.out.println("Attribute value from Inner static class: "+(obj1.ample));
}
// Output: Attribute value from Inner static class: 6
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

 

Another Example: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class O_Class{
String mrx="John";
static class I_Class{
String ample="Robert";
}
}
public class Main {
public static void main(String[] args) {
O_Class.I_Class obj1=new O_Class.I_Class();
System.out.println("Output: "+(obj1.ample));
}
// Output: Robert
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

 

Lembre-se: uma classe interna estática não tem acesso aos membros da classe externa, assim como os atributos e métodos estáticos .


Usando Inner Class para acessar Outer

As classes Java Inner têm a vantagem de acessar métodos e atributos de suas classes externas :

Example: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class Out_class{
int mrx=3*4;
class In_class{
public int return_value(){
return mrx;
}
}
}
public class Main {
public static void main(String[] args) {
Out_class my_Object1=new Out_class();
Out_class.In_class my_Object2=my_Object1.new In_class();
System.out.println(my_Object2.return_value());
}
// Output: 12 (Inner Class object is used here to access outer class method)
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

 

Another Example: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class Out_class{
int mrx=14;
int ample=3;
class In_class{
public int return_modulus(){
return mrx%ample;
}
}
}
public class Main {
public static void main(String[] args) {
Out_class my_Object1=new Out_class();
Out_class.In_class my_Object2=my_Object1.new In_class();
System.out.println(my_Object2.return_modulus());
}
// Output: 2 (Inner Class object is used here to access outer class method as 14 % 3 =2 )
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Nós valorizamos o seu feedback.
+1
0
+1
0
+1
0
+1
0
+1
0
+1
0
+1
0

Assine a nossa newsletter
Digite seu e-mail para receber um resumo semanal de nossos melhores posts. Saber mais!
ícone