今天学习了final修饰符以及接口的内容。
final修饰符
7.(final属性的初始化)有如下代码
class MyClass{
final int value;
public MyClass(){
}
public MyClass(int value){
this.value = value;
}
}
public class TestMain{
public static void main(String args[]){
MyClass mc = new MyClass(10);
System.out.println(mc.value);
}
}
选择正确答案:
A.编译通过,输出 10
B.编译不通过,把第 2 行改为 final int value = 10;
C.编译不通过,把第 3 行改为 public MyClass(){ value = 10; }
C
8.(final变量)有如下代码
class MyClass {
public void printValue(final int value){
System.out.println(value);
}
public void changeValue(int value){
value = value * 2;
System.out.println(value);
}
}
public class TestMain{
public static void main(String args[]){
MyClass mc = new MyClass();
int value = 5;
final int fvalue = 10;
mc.printValue(value); //1
mc.printValue(fvalue); //2
mc.changeValue(value); //3
mc.changeValue(fvalue);//4
}
}
请选择正确答案
A.编译通过
B.//1出错
C.//2出错
D.//3出错
E.//4出错
A
运行结果为
5
10
10
20
9.(final修饰引用)有如下代码
class MyValue{
int value;
}
public class TestFinal{
public static void main(String args[]){
final MyValue mv = new MyValue();
mv.value = 100;//1
System.out.println(mv.value);
}
}
下面说法正确的是:
A. 编译不通过 。
B. 编译通过。在//1 处加上:mv.value = 200; 则编译不通过
C. 编译通过。如果在//1 处加上:mv = new MyValue(); 则编译不通过。
C
注:引用数据类型,地址不可改变,但地址中的内容可变
10.(final方法,方法覆盖)有如下代码
class Super{
public final void m1(){
System.out.println("m1() in Super");
}
public void m1(int i){
System.out.println("m1(int) in Super");
}
}
class Sub extends Super{
public void m1(int i){
System.out.println("m1(int) in Sub");
}
public void m1(double d){
System.out.println("m1(double) in Sub");
}
}
public class TestMain{
public static void main(String args[]){
Sub s = new Sub();
s.m1();
s.m1(10);
s.m1(1.5);
}
}
以上程序是否能编译通过?如果可以,输出运行结果;
如果不可以,应该怎样修改?
可以编译通过
运行结果为:
m1() int Super
m1(int) int Sub
m1(double) int Sub
13.(修饰符综合)下列方法声明中正确的是:
A.abstract final void m()
B.public void final m()
C.static abstract void m()
D.private final void m()
E.private abstract void m()
F.public static final void m()
正确的是:
D F
注: 修饰符 返回值类型 方法名 ()
接口
1.代码改错
interface IA{
void m1();
int a = 100;
}
class MyClass implements IA{
void m1(){
}
}
public class TestInterface{
public static void main(String args[]){
IA ia = new MyClass();
ia.m1();
System.out.println(IA.a);
}
}
修改后的代码如下:
interface IA{
void m1();
int a = 100;
}
class MyClass implements IA{
public void m1(){//接口中的方法默认都是public修饰符,所以实现类的方法也应该是public
}
}
public class TestInterface{
public static void main(String args[]){
IA ia = new MyClass();
ia.m1();
System.out.println(IA.a);
}
}
注:
实现类相当于子类,子类的访问权限不能小于父类。
2.代码填空
interface IA{
void m1();
void m2();
}
_____ class MyClassA implements IA{
public void m1(){
}
}
class MyClassB extends MyClassA{
_______________ {
}
}
填空后的代码如下:
interface IA{
void m1();
void m2();
}
abstract class MyClassA implements IA{
public void m1(){
}
}
class MyClassB extends MyClassA{
public void m2() {
}
}
努力到无能为力,拼搏到感动自己!
千锋督促我!
加油!