第一题
判断下面代码的输出结果
public class Animal {
public final int a=10;
public Animal() {
a=20;
}
public Animal(int a) {
this.a=a;
}
}
public class Test {
public static void main(String[] args) {
Animal animal=new Animal(3);
System.out.println(animal.a);
}
}
A:10
B:20
C:编译出错
D:运行出错
解析:
答案是 C
编译出错,因为final成员变量只能赋值一次
类里面的final成员变量a已经赋值过了,构造方法里面就不能再赋值
因此直接编译报错
============================================================================
第二题
判断下列语句是否正确
A:一个匿名内部类,只会创建一个对象
B:匿名内部类只能在方法内部定义
C:匿名内部类对象的方法只能调用一次
解析
A:正确,匿名内部类是实现类没有名字,每次创建匿名内部类,都是一个新的没有名字的实现类,因此每个匿名内部类只能创建一次对象。
B:错误,匿名内部类还可以在方法参数上面定义
C:匿名内部类创建之后,可以多次调用方法
============================================================================
第三题:分析以下需求,并用代码实现
interface Inter {
void show();
}
class Outer {
//补齐代码
}
public class OuterDemo {
public static void main(String[] args) {
Outer.method().show();
}
}
要求在控制台输出HelloWorld
解析:
1.通过Outer类名直接调用method方法,说明method方法是静态方法
2.调用method方法后,可以调用show方法,说明method方法的返回值是一个Inter类型
3.在method方法内部,产生一个Inter接口的子类对象返回
4.产生Inter的子类对象时,要重写show方法,show方法内部实现的功能是打印HelloWorld
public class Outer {
public static Inter method(){
Inter inter=new Inter() {
@Override
public void show() {
System.out.println("Helloword");
}
};
return inter;
}
}
============================================================================
第四题:下面说法正确的是()
A、final可修饰类、属性、方法
B、abstract可修饰类、属性、方法
C、定义抽象方法需有方法的返回类型、名称、参数列表和方法体
D、用final修饰的变量,在程序中可对这个变量的值进行更改
A正确,
final修饰类,往下讲,不能被继承,类中方法不能被重写;
往上讲,可以继承父类,可以重写父类的方法。
final修饰方法,是最终方法,只能被继承,不能重写。
final修饰局部变量,是基本类型时只能赋一个具体值且不能再改变,
是引用类型时只能赋一次地址值且不能再改变。
final修饰成员变量,可以直接赋值,也可以通过构造方法赋值但是必须保证所有构造方法都进行了赋值。
选A
B错误,abstract可以修饰类,是抽象类;
可以修饰方法,是抽象方法;
不能修饰属性,就是成员变量。
C错误,抽象方法没有方法体。
D错误,被final修饰的变量,只能赋值一次,不可再改变。
本文介绍了Java中的final关键字和匿名内部类的相关知识点,并提供了四道习题进行深入理解。第一题指出final成员变量在构造方法中再次赋值会导致编译错误。第二题阐述了匿名内部类的创建规则,如每个匿名内部类只能创建一次对象,可以在方法内部或参数上定义,且其方法可以多次调用。第三题要求通过静态方法创建并返回一个实现了特定接口的对象,该对象的show方法打印'HelloWorld'。第四题解释了final修饰符的使用规则,包括可修饰类、方法和变量,以及final变量的赋值限制。总结了final和abstract的适用场景和特性。
1365

被折叠的 条评论
为什么被折叠?



