#멋쟁이사자처럼 #부트캠프 #백엔드 #JAVA

Inner Classes

Example: Book

public class Book {
    private String title;
    private Author author;

    public Book(String title) {
        this.title = title;
        this.author = new Author();
    }

    public void printBookDetails() {
        System.out.println("Book Title: " + title);
        System.out.println("Author: " + getAuthor().getName());
    }

    public class Author {
        private String name;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }

    public Author getAuthor() {
        return author;
    }

    public void setAuthor(Author author) {
        this.author = author;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }
}
public class Main {
    public static void main(String[] args) {
        Book book = new Book("Java");
        book.getAuthor().setName("강경미");

        book.printBookDetails();
    }
}

Example: OuterClass

public class OuterClass {
    private int outerField = 10;
    private InnerClass innerClass;

    public void outerMethod() {
        InnerClass inner = new InnerClass();
        inner.innerMethod();
    }

    public class InnerClass {
        public void innerMethod() {
            // InnerClass has access to private fields of its outer class.
            System.out.println("outerField" + outerField);
        }
    }
}
public class Main {
    public static void main(String[] args) {
        OuterClass outerClass = new OuterClass();
        outerClass.outerMethod();
    }
}

Local Inner Classes

Example: LocalOuterClass

public class LocalOuterClass {
    private int outerField = 10;

    public void outerMethod() {
        class InnerClass {
            public void innerMethod() {
                System.out.println("outerField: " + outerField);
            }
        }

        InnerClass inner = new InnerClass();
        inner.innerMethod();
    }

    public static void main(String[] args) {
        LocalOuterClass outerClass = new LocalOuterClass();
        outerClass.outerMethod();
    }
}

Static Inner Classes

Example: StaticOuterClass

public class StaticOuterClass {
    private int outerField = 10;
    private static int staticOuterField = 10;

    public void outerMethod() {}

    static class InnerClass {
        public void innerMethod() {
            System.out.println(staticOuterField);
        }

        public static void staticInnerMethod() {
            System.out.println("static");
        }
    }

    public static void main(String[] args) {
        StaticOuterClass.InnerClass inner =
                new StaticOuterClass.InnerClass();
        inner.innerMethod();

        StaticOuterClass.InnerClass.staticInnerMethod();
    }
}

The Order of Modifiers

The modifiers for classes, methods, and member variables are written in the following order as specified in the Java Language Specification: