Java一些重要的小知识点(二)教科书该改一改了!!!静态内部类一样也可以访问外嵌类任何成员(只是不能直接访问)

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、

在这里插入图片描述
在这里插入图片描述

之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值