向现有方法添加新方法 class
Add new method to existing class
我知道匿名 class.We 可以用它来覆盖 class methods.This 是一个例子:
public class User {
private final String name;
public User(final String name){
this.name=name;
}
public void sayHello(){
System.out.println("Hello : "+name);
}
public static void main(String[] args) {
User s = new User("CHORT"){
@Override
public void sayHello(){
System.out.println("HELLO FROM ANONYMOUS CLASS");
}
};
}
}
但是我注意到下面的结构也是正确的(我的IDEA没有突出显示)
public class User {
private final String name;
public User(final String name){
this.name=name;
}
public void sayHello(){
System.out.println("Hello : "+name);
}
public static void main(String[] args) {
User s = new User("CHORT"){
public void sayHello2(){
System.out.println("HELLO FROM ANONYMOUS CLASS");
}
};
}
}
但是当我想调用方法 sayHello2 时,IDEA 告诉我它不是 exist.What 这个构造的目的?
首先题名是错误的。你没有 "Add new method to existing class"。您向扩展现有 class.
的匿名 class 添加了一个方法
匿名 classes 可以包含常规 classes 包含的任何方法。它们不必只包含它们扩展的 class 方法或它们实现的接口。
因此,在您的匿名 class 中定义 sayHello2
是完全有效的,但非常无用,因为您不能从匿名 class 主体外部调用该方法。
另一方面,如果您确实从匿名 class 主体中调用它(您可以将其设为 private
,因为它不能从外部调用,它会很有用无论如何):
User s = new User("CHORT") {
@Override
public void sayHello() {
sayHello2();
}
private void sayHello2() {
System.out.println("HELLO FROM ANONYMOUS CLASS");
}
};
编辑:我想到的另一件事 - 你可以使用反射从外部调用你的 sayHello2
,但我不确定你为什么要那样做。
我知道匿名 class.We 可以用它来覆盖 class methods.This 是一个例子:
public class User {
private final String name;
public User(final String name){
this.name=name;
}
public void sayHello(){
System.out.println("Hello : "+name);
}
public static void main(String[] args) {
User s = new User("CHORT"){
@Override
public void sayHello(){
System.out.println("HELLO FROM ANONYMOUS CLASS");
}
};
}
}
但是我注意到下面的结构也是正确的(我的IDEA没有突出显示)
public class User {
private final String name;
public User(final String name){
this.name=name;
}
public void sayHello(){
System.out.println("Hello : "+name);
}
public static void main(String[] args) {
User s = new User("CHORT"){
public void sayHello2(){
System.out.println("HELLO FROM ANONYMOUS CLASS");
}
};
}
}
但是当我想调用方法 sayHello2 时,IDEA 告诉我它不是 exist.What 这个构造的目的?
首先题名是错误的。你没有 "Add new method to existing class"。您向扩展现有 class.
的匿名 class 添加了一个方法匿名 classes 可以包含常规 classes 包含的任何方法。它们不必只包含它们扩展的 class 方法或它们实现的接口。
因此,在您的匿名 class 中定义 sayHello2
是完全有效的,但非常无用,因为您不能从匿名 class 主体外部调用该方法。
另一方面,如果您确实从匿名 class 主体中调用它(您可以将其设为 private
,因为它不能从外部调用,它会很有用无论如何):
User s = new User("CHORT") {
@Override
public void sayHello() {
sayHello2();
}
private void sayHello2() {
System.out.println("HELLO FROM ANONYMOUS CLASS");
}
};
编辑:我想到的另一件事 - 你可以使用反射从外部调用你的 sayHello2
,但我不确定你为什么要那样做。