Java でラムダ式を実行する方法を学ぶために検索しましたが、代わりに混乱が生じました。したがって、匿名クラスに関する私の理解は次のとおりです。
public class SomeObject {
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add(new SomeObject());
}
}
匿名内部クラスという言葉は以前に見たことがありますが、その時は通常の匿名クラスが何であるかを知りませんでした。私が見ているスレッドやビデオの多くは、匿名の内部クラスを単に「匿名クラス」と呼んでいるようです。それらは同義ですか?匿名内部クラスの私の理解は次のとおりです。
public class Rectangle {
private double length;
private double width;
private double perimeter;
public void calculatePerimeter() {
perimeter = (2*length) +(2*width);
}
public static void main(String[] args) {
Rectangle square = new Rectangle() {
public void calculatePerimeter() {
perimeter = 4*length;
}
};
}
}
基本的に、Square のサブクラスを作成してから calculatePerimeter() メソッドをオーバーライドする代わりに、1 回限りの Square クラスを作成し、それらのメソッドをオーバーライドすることができます。これは正しいです?
したがって、匿名の内部クラスは継承と関係があります。私はそれの使用を理解していません。おそらく、これまでにそれらを使用したことがないか、プログラミングの経験があまりないためです。例を挙げたり、それが役立つ場合に説明したりできますか?
更新: 匿名内部クラスのコードを IDE に移動したときに、エラーがあることがわかりました。どうやら、「正方形」は長方形のフィールドを継承していません。これでますます駄目になりませんか?
同等のものは次のとおりです。
public class Rectangle {
private double length;
private double width;
private double perimeter;
public void calculatePerimeter() {
perimeter = (2*length) +(2*width);
}
}
public class Square extends Rectangle {
@Override
public void calculatePerimeter() {
perimeter = 4*getLength();
}
public double getLength() {
return length;
}
}