Java 匿名类
匿名类是什么?
在一个表达式中定义类和实例化,而不指定类名的类称为匿名类。由于不需要指定类名,所以可以实现接口、调用方法、继承类、重写方法和调用方法,非常方便在需要临时使用方法的情况下。
interface Inter{
void methodA();
}
class SuperT{
void methodS() {
System.out.println("Super");
}
}
class OuterT{ //外側クラス
void method1() {
new Inter() { //インターフェースの実装とインスタンス化を同時に行う
public void methodA() {
System.out.println("methodA実装");
}
}.methodA(); //インスタンス化したものからmethodAを呼び出す
}
/*void method2() {
new SuperT() {
void methodS() {
System.out.println("Override");
}
}.methodS();
}*/
}
public class Tokumei {
public static void main(String[] args) {
OuterT ot = new OuterT();
ot.method1();
//ot.method2();
System.out.println("-----SuperT型の変数に代入してから呼び出した場合-----");
SuperT st = new SuperT() { //スーパークラス型の変数に代入
void methodS() {
System.out.println("Override");
}
void methodSub() { //匿名サブクラス独自メソッド
System.out.println("Sub");
}
};
st.methodS();
//st.methodSub(); //スーパークラス型変数では匿名サブクラス独自のメソッドは呼べない
System.out.println("-----直接オブジェクトから呼び出した場合-----");
new SuperT() {
void methodS() {
System.out.println("Override");
}
void methodSub() {
System.out.println("Sub");
}
}.methodSub(); //直接呼ぶことはできる
}
}
输出结果 (Chū lì
methodA実装
-----SuperT型の変数に代入してから呼び出した場合-----
Override
-----直接オブジェクトから呼び出した場合-----
Sub
在中文中,有以下几种方式来表达:
1. 角度
2. 要点
3. 焦点
当继承一个类时,匿名子类可以重写方法。
当将继承自超类的匿名子类赋值给超类类型的变量后进行调用时,只能调用超类中存在的方法(包括覆写的方法)。原理与常规超类和子类的情况相同,即访问范围由变量类型决定。
如果从直接对象中调用,还可以调用匿名子类中独自设置的方法。