62,620
社区成员
发帖
与我相关
我的任务
分享
//父类
class A{
int j = 30;
protected void printFun(){
System.out.println("This is abcde~~");
}
}
class B{
public A b(){
A a = new A(){
public void printFun(){
System.out.println("This is not abcde~~ ");
}
//新加的方法
public void printFun2(){
System.out.println("Lalalalalala!!!");
}
};
return a;
}
}
class NoNameClassTest{
public static void main(String aa[]){
A aaa;
B b = new B();
aaa = b.b();
aaa.printFun();
aaa.printFun2();//此行报错,为:“The method printFun2() is undefined for the type A”
}
}
public class A {
public void printFun() {
System.out.println("printFun");
}
}
public static void main(String aa[]) {
A a = new A() {
public void print1() {
System.out.println("1");
}
public void print2() {
System.out.println("2");
}
};
a.print1();//错误
a.printFun();
}
这样的写法是不能用来添加新方法的,但是却可以用来覆盖 A类中已有的方法。
如果想使用新添加的方法,可以这么写:
public static void main(String aa[]) {
new A() {
public void print1() {
System.out.println("1");
}
public void print2() {
System.out.println("2");
}
}.print1();
}
具体原理不是特别清楚,应该和权限访问问题和作用域是有关系的。public class InterClassDemo {
public static void main(String aa[]){
/* A aaa;
B b = new B();
aaa = b.b();
aaa.printFun();
aaa.printFun2();*/
new B().b();
}
}
//父类
abstract class A{
int j = 30;
abstract void printFun();
}
class B{
public void b(){
A a = new A(){
public void printFun(){
System.out.println("This is not abcde~~ ");
}
//新加的方法
public void printFun2(){
System.out.println("Lalalalalala!!!");
}
};
a.printFun();
//错误
a.printFun2();
}
}