匿名内部类中调用自己新增的成员变量和方法:
匿名内部类相当于一个类的子类,但是匿名内部类是无类名的,是不能声明对象的;
父类对象,继承父类的另一个子类对象都是不能调用匿名类中自己新声明的成员变量和方法的;
那么匿名类自己新增定义的成员变量和方法要怎么调用呢?
如下代码↗:
创建一个抽象类(声明一个计算方法),一个中间类(完成上转型对象引用的传参),两个子类(分别继承抽象类),一个测试类(在测试类中创建抽象类的匿名类,并实现匿名类对自己新增 成员变量 和 方法 的调用);
//抽象类
public abstract class abstractClass {
//声明抽象方法
abstract void Calculate(double x,double y);
}
//中间类
public class middleClass {
//实现上转型对象引用的赋值
void getMethod(abstractClass abs,double x,double y){
abs.Calculate(x,y);
}
}
//子类
public class childClass_sum extends abstractClass {
//计算两个数的和
void Calculate(double x,double y) {
double sum = x+y;
System.out.println("x+y= "+sum );
}
}
//子类
public class childClass_muti extends abstractClass {
//计算两个数的乘
void Calculate(double x,double y) {
double muti = x*y;
System.out.println("x*y= "+muti );
}
}
//测试类
public class testClass {
public static void main(String [] args){
middleClass mc = new middleClass();
//创建计算加法的子类对象引用,进行调用
mc.getMethod(new childClass_sum(),11,10);
//创建计算乘法的子类对象引用,进行调用
mc.getMethod(new childClass_muti(), 11, 10);
//abstractClass抽象类的 匿名类,在类中新增自己的成员变量和方法,在重写父类的方法中进行调用
mc.getMethod(new abstractClass(){
//匿名类自己的成员变量
double div;
//重写父类的抽象方法,在方法中调用匿名类自己新增的成员变量和方法
void Calculate(double x,double y) {
div = x/y;
System.out.println("x/y= "+ div );
myMethods(x,y);
}
//匿名类自己的方法
public void myMethods(double x,double y){
System.out.println("匿名类自己新增的方法");
System.out.println("计算两个数的平均值:"+(x+y)/2);
}
},100, 60);
//匿名类结束
}
}
在以上代码中,抽象类abstractClass 创建了一个匿名类,匿名类中自己新增了 成员变量 div 和 实例方法 myMethod() , 它们在重写的父类方法 Calculate() 中进行调用;
代码输出结果:
x+y= 21.0
x*y= 110.0
x/y= 1.6666666666666667
匿名类自己新增的方法
计算两个数的平均值:80.0