Middle
Millised on erinevused sisemiste (inner) ja sisemiste (nested) klasside vahel Java-s?
sobes.tech AI
Vastus AI-lt
-
Sisemklassid (Nested classes): Statilised välise klassi liikmed. Ei saa otse ligi mitte-staatilistele liikmetele (välja ja meetoditele) välises klassis, vaid ainult välise klassi eksemplari kaudu. Deklareerivad
staticmärksõnaga. -
Sisemklassid (Inner classes): Mitte-staatilised välise klassi liikmed. Neil on täielik juurdepääs kõigile liikmetele (staatilised ja mitte-staatilised) välises klassis, kaasa arvatud privaatsed. Siseklassi eksemplari loomiseks on vaja välise klassi eksemplari. Ei kasuta
staticmärksõna.
Näide:
// Välise klass
class Outer {
private int outerField = 10;
private static int staticOuterField = 20;
// Staatiline sisemine klass
static class StaticNestedClass {
void display() {
// Ainult staatiliste liikmete juurdepääs
System.out.println("Static nested: " + staticOuterField);
// Otse outerField-ile ligi ei ole
// System.out.println(outerField); // Kompilatsiooni viga
}
}
// Mitte-staatiline sisemine klass
class InnerClass {
void display() {
// Kõigi liikmete juurdepääs
System.out.println("Inner: " + outerField);
System.out.println("Inner (static): " + staticOuterField);
}
}
}
// Kasutamine
public class Main {
public static void main(String[] args) {
// Staatilise sisemise klassi eksemplar
Outer.StaticNestedClass staticNested = new Outer.StaticNestedClass();
staticNested.display();
// Mitte-staatilise sisemise klassi eksemplar
Outer outer = new Outer();
Outer.InnerClass inner = outer.new InnerClass();
inner.display();
}
}
| Omadus | Siseklass (Nested Class) | Mitte-staatiline klass (Inner Class) |
|---|---|---|
| Märksõna | static |
Ei kasutata |
| Ligipääs välise klassi liikmetele | Ainult staatilised | Kõik liikmed |
| Eksemplari loomine | Ei ole vajalik | Vajalik |
| Seos välise klassi eksemplariga | Ei | Jah |