📁 ex01
☕ FormElement.java
public abstract class FormElement { }
☕ Clickable.java
public interface Clickable { }
☕ Hoverable.java
public interface Hoverable { }
☕ Button.java
public class Button extends FormElement implements Clickable, Hoverable {
public static int lastNo = 0;
private int no = ++lastNo;
private String name;
private int spaces = 2;
public boolean disabled = false;
public Button() {
name = "Default";
spaces = 1;
}
public Button(String name, int spaces) {
this.name = name;
this.spaces = spaces;
}
public int getNo() { return no; }
public String getName() { return name; }
public int getSpaces() { return spaces; }
public void onClick (boolean rightClick, int x, int y) {
System.out.printf(
"🖱️ %s (%d, %d)%n",
(rightClick ? "우클릭" : "좌클릭"), x, y
);
}
}
☕ Main.java
// 💡 클래스를 가져오는 두 방법
// - 와일드카드<?> 사용 가능
Class<Button> btnClass1 = Button.class;
// 예외 던짐 : ClassNotFoundException
Class<?> btnClass2 = Class.forName("sec13.chap01.ex01.Button");
boolean areSame = btnClass1 == btnClass2;
// 💡 모든 생성자 배열로 가져오기
Constructor[] btn1Constrs = btnClass1.getConstructors();
// 💡 생성자 가져오기
// - 주어진 인자 타입에 일치하는 것으로
// - 일치하는 것 없을 시 예외 던짐 : NoSuchMethodException
Constructor<?> btn1Constr = btnClass1
.getConstructor(String.class, int.class);