- StringBuilder 클래스
- 중첩 클래스
- Thread
StringBuilder 참조변수 = new StringBuilder("문자열");
class Outer{
private int num1 = 10;
public void method1(){
System.out.println("num1 : " + num1);
}
public void printInner(){
Inner inner = new Inner();
inner.method2();
}
class Inner { // Inner class : 클래스 안에 클래스
private int num2 = 20;
public void method2(){
System.out.println("Inner.num1 : " + num1);
System.out.println("Inner.num2 : " + num2);
}
}
}
public class InnerClass1 {
public static void main(String[] args) {
Outer outer = new Outer();
outer.method1();
Outer.Inner inner = outer.new Inner(); // 바깥쪽 클래스가 존재해야 이게 생성될 수 있다.
inner.method2();
outer.printInner();
}
}
/*
로컬 클래스 예제
*/
public class LocalClass1 {
private int num1 = 10;
public void method1(){
int num2 = 30;
class Local {
private int num3 = 30;
public void method2(){
System.out.println("num1 : " + num1);
System.out.println("num2 : " + num2);
System.out.println("num3 : " + num3);
}
}
Local local = new Local();
local.method2();
}
public static void main(String[] args) {
LocalClass1 localClass1 = new LocalClass1(); // 객체 생성
localClass1.method1();
}
}
/*
static 클래스 예제
*/
public class StaticClass1 {
static class Cal{
int num = 0;
public void plus(){
num++;
}
}
public static void main(String[] args) {
StaticClass1.Cal cal = new StaticClass1.Cal();
cal.plus();
System.out.println(cal.num);
}
}
interface Inter1{ // 인터페이스는 뭔가 만들기 위해 틀을 설계 해놓은것
void method1();
}
class TestClass1 implements Inter1{
@Override
public void method1() {
System.out.println("Inter1을 구현한 클래스"); // 오버라이드를 시켜 구현을 해줌
}
}
interface Inter2{
String method2(); // 추상메소드가 반환형이 String 이름이 메소드
}
class TestClass2 implements Inter2{
@Override
public String method2() {
return "실명 클래스!"; // 일반적으로 쓸때 TestClass2를 쓸때 메소드 리턴
}
}
class TestClass3{
public void method3(Inter2 inter2){ // 매개변수가 Inter2라는 타입으로 객체를 넣어줘야 한다.
System.out.println(inter2.method2()); // 오버라이드된 메소드 사용
}
}
public class Anonumous2 {
public static void main(String[] args) {
TestClass2 testClass2 = new TestClass2();
TestClass3 testClass3 = new TestClass3(); // 객체 생성
testClass3.method3(testClass2); // 매개변수가 무조건 inter2타입으로 만들어진 객체가 필요.
// 이게 지금까지 배웠던 일반적인 방법
// 익명 클래스 시작!(아주 아주 중요)→ 이거 모르면 자바 모르는거
testClass3.method3(new TestClass2(){ // 일회용으로 만들어서 넣어주겟다. 굳히 참조변수만들지 않고 바로 객체를 만들어서 사용
// Test2사용하려면 inter2가 필요
@Override
public String method2() { // 오버라이드를 재구현
return "익명 객체";
}
/*
왜 이렇게 쓰는가?
- 꼭 구현해야 하는 인터페이스 메소드를 강제성있게 만들어 놓음.(인터페이스를 구현하도록)
- 미리 준비되어있으나 비어있다. 채워서 사용
*/
});
}
}