Java基礎系列之內部類的多重繼承與事件回撥
阿新 • • 發佈:2018-12-26
為什要使用內部類
- 實現多重繼承
- 實現閉包(隱藏關鍵環節)
- 事件回撥
內部類的型別
- 非靜態內部類
public class NoStaticInsideClass {
private @Setter String name;
private @Setter int age;
class UserAction{
public void call() {
System.out.println(name + " "+age);
}
}
public static void main(String[] args) {
NoStaticInsideClass ni = new NoStaticInsideClass();
ni.setName("張三");
ni.setAge(18);
UserAction ua = ni.new UserAction();
ua.call();
}
}
- 靜態內部類
public class StaticInsideClass {
private static String name;
private static int age;
static class UserAction{
public void call() {
System.out.println(StaticInsideClass.name + " "+StaticInsideClass.age);
}
}
public static void main(String[] args) {
StaticInsideClass.name = "張三";
StaticInsideClass.age = 18;
UserAction ua = new StaticInsideClass.UserAction();
ua.call();
}
}
- 匿名內部類
public class AnonymousInsideClass {
private @Setter String name;
private @Setter int age;
UserAction ua = new UserAction(){
public void call() {
System.out.println(name + " "+age);
}
};
public static void main(String[] args) {
AnonymousInsideClass ni = new AnonymousInsideClass();
ni.setName("張三");
ni.setAge(18);
ni.ua.call();
}
}
實戰
- 利用內部類實現多重繼承
class Father {
public String name() {
return "張";
}
}
class Mather {
public String face() {
return "白色";
}
}
public class Child extends Father {
class Child2 extends Mather{
public String childPeculiarity(){
return "繼承了爸爸的姓("+name() + ")和媽媽的面板("+face()+")";
}
}
public static void main(String[] args) {
System.out.println("兒子的特點是:" + new Child().new Child2().childPeculiarity());
}
}
- 利用內部類實現按鈕事件回撥
public interface BtnClickListener {
public void call();
}
public class Button {
public void addClickListener(BtnClickListener event) {
event.call();
}
}
public class UserClick {
/**
* 匿名內部類
*/
BtnClickListener bl = new BtnClickListener() {
@Override
public void call() {
System.out.println("當用戶點選了按鈕後,執行了此方法");
}
};
public static void main(String[] args) {
new UserClick().triggerClick();
}
/**
* 模擬觸發按鈕事件
*/
public void triggerClick() {
new Button().addClickListener(bl);
}
}
轉載自:https://www.jianshu.com/p/7d19315cd321