62,614
社区成员
发帖
与我相关
我的任务
分享
void std(int i){
this.i=i;
}
void std(int i){
this.i=i;
}
这里用隐式方法重写了 父类的无参构造。添加了新参数i,因为匿名内部类的只有一次性效果,在程序内部无法使用,但是在匿名类内部可以用非静态初始块就可以进行新参数的传递。
匿名内部类 不可以写显示式构造方法,用的是隐式构造方法而且只能重写无参的父类构造,因为没有名字所以无法进行参数传递,难道无参构造就不算构造了么?我只是说可以有,不是说一定要有,看上去确实很鸡肋实际中完全用不上,我只是说明可能性。
public class test9 {
public static void main(String args[]) {
std s=new std() {
private int i;
void std(int i){
this.i=i;
}
public void show(){
System.out.println("子构造----");
}
public void print() {
System.out.println("子构造-------");
}
public void show2() {
System.out.println("新构造法-----");
}
{
System.out.println("子构造法~~~~~");
show2();
std(2);
System.out.println(i);
}
};
s.show();
s.print();
}
}
abstract class std{
public std() {
System.out.println("父构造------");
}
public abstract void print();
public void show(){
System.out.println("父构造----");
}
}
运行结果
父构造------
子构造法~~~~~
新构造法-----
2
子构造----
子构造-------
前面有点说错,新构造法还是可以在 匿名类中的非静态初始块中实现的,父类的显式构造重写为隐式构造,也可以在非静态初始块中实现。
public class test {
public static void main(String args[]) {
std s=new std() {
public void show(){
System.out.println("子构造----");
}
void print() {
System.out.println("子构造-------");
}
public void show2() {
System.out.println("新构造法-----");
}
};
s.show();
s.print();
}
}
abstract class std{
public std() {
System.out.println("父构造------");
}
public abstract void print();
public void show(){
System.out.println("父构造----");
}
}
运行结果
父构造------
子构造----
子构造-------
接下来说说自己的理解:
public std() {System.out.println("父构造------")}这个构造是显示构造,就在类初始化时会被调用
public void show(){System.out.println("子构造----");} 这个构造方法为隐式构造,需要用s.show();来调用
public abstract void print();这个是抽象方法,如果匿名类用的父类是抽象类,其中的抽象方法一定要重写,不然实例化会报错。
public void show2() ;这个是新添加的方法,但是因为是匿名类,本身没用名字,虽然可以编译但是无法调用,所以没有意义。