10、
这里要明白匿名类、接口、抽象类的概念
下图是个极好的例子
上图我们可以知道匿名类需要new,而如果匿名类是抽象类,抽象类不能new实例化,所以自相矛盾,故匿名类一定是一个非抽象子类
匿名内部类必须继承一个父类,或实现一个接口,但最多只能继承一个父类,或实现一个接口
匿名内部类可以继承父类和实现接口,但是不能用extend和implement,所以没有额外的接口
匿名类本身就是内部类,所以不能有static成员变量
故选C
11、
详细代码如下:
package beginner;
import java.util.Scanner;
public class Example7_42 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner reader = new Scanner(System.in);
double sum = 0;
int m = 0;
while(reader.hasNextDouble()) {
double x = reader.nextDouble();
assert (x >= 0 && x <= 100): "数据不合理";
m += 1;
sum += x;
}
System.out.printf("%d digits' sum is %f\n", m, sum);
System.out.printf("%d digits' average is %f\n", m, sum / m);
}
}
12、内部类的外嵌类的成员变量在内部类中仍然有效,不论内部类是静态的还是非静态的。
如果内部类是非静态的那解释起来很容易,内部类成员可以直接访问外部类的私有数据,因为内部类被当成其外部类成员,同一个类的成员之间可以互相访问。但外部类不能直接访问内部类的实现细节,例如内部类的成员变量。
如果内部类是静态的,那么请看下面这个例子:
package beginner;
public class Test2 {
public void speak()
{
System.out.println("hei");
}
static int a = 10;
static class Tes2{
static int b = new Test2().a;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Test2.Tes2 tv = new Test2.Tes2();
System.out.println(tv.b);
}
}
结果如下:
静态内部类一样也可以访问外嵌类任何成员,但是不能直接访问
但是在很多教科书里还是这么写:
这些都不严谨,应该说静态内部类不能直接访问外嵌类的任何实例成员
用我之前那个例子,教科书里固化的定理也该被推翻了!!!
静态内部类一样也可以访问外嵌类任何成员(只是不能直接访问)
13、
14、