千锋Java&Day17课后作业

今天学习了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() {
         }
}

努力到无能为力,拼搏到感动自己!
千锋督促我!
加油!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值