乔治爱啃脚趾 发表于 2023-11-25 09:09:39

java关于final的用法

修改给定的程序,使得程序能顺利运行,且结果如下:
speedlimit=120
running safely with 100kmph
running safely with 100kmph

根据提示,在下面编辑器中根据编译的错误提示修改源程序。
/* 请在下面的 Begin 和 end之间修改源程序。
不可以修改 final 变量的值
final方法,不可以重写
不可以定义final 类
*/
public class Main {
    public static void main(String args[]) {
      Bike1 obj = new Bike1();
      obj.run();

      Honda honda = new Honda();
      honda.run();

      Yamaha yamaha = new Yamaha();
      yamaha.run();
    }
}

/********** Begin *********/
class Bike1 {
    final int speedlimit = 90;

    void run() {
      speedlimit = 120;
      System.out.println("speedlimit=120");
    }
}

class Bike2 {
    final void run() {
      System.out.println("running");
    }
}

class Honda extends Bike2 {
    void run() {
      System.out.println("running safely with 100kmph");
    }
}

final class Bike3 {
}

class Yamaha extends Bike3 {
    void run() {
      System.out.println("running safely with 100kmph");
    }
}
/********** end *********/

FishC_GPT 发表于 2023-11-25 09:09:52

/* 请在下面的 Begin 和 end之间修改源程序。
不可以修改 final 变量的值
final方法,不可以重写
不可以定义final 类
*/
public class Main {
    public static void main(String[] args) {
      Bike1 obj = new Bike1();
      obj.run();

      Honda honda = new Honda();
      honda.run();

      Yamaha yamaha = new Yamaha();
      yamaha.run();
    }
}

/********** Begin *********/
class Bike1 {
    final int speedlimit = 90;

    void run() {
      // 不可以修改final变量的值
      System.out.println("speedlimit=" + speedlimit);
    }
}

class Bike2 {
    final void run() {
      System.out.println("running");
    }
}

class Honda extends Bike2 {
    // 不可以重写final方法
    // void run() {
    //   System.out.println("running safely with 100kmph");
    // }
}

final class Bike3 {
}

class Yamaha extends Bike3 {
    void run() {
      System.out.println("running safely with 100kmph");
    }
}
/********** end *********/
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。

sfqxx 发表于 2023-11-25 09:48:45

错误如下:

在Bike1类中,speedlimit被声明为final,这意味着它的值一旦被初始化就不能再改变。所以,我们不能在run方法中修改speedlimit的值。

在Honda类中,程序试图重写Bike2类的run方法,但是run方法在Bike2类中被声明为final,这意味着它不能被重写。

在Yamaha类中,程序试图继承Bike3类,但是Bike3类被声明为final,这意味着它不能被继承。

代码:

public class Main {
    public static void main(String args[]) {
      Bike1 obj = new Bike1();
      obj.run();

      Honda honda = new Honda();
      honda.run();

      Yamaha yamaha = new Yamaha();
      yamaha.run();
    }
}

class Bike1 {
    final int speedlimit = 90;

    void run() {
      System.out.println("speedlimit=" + speedlimit);
    }
}

class Bike2 {
    void run() {
      System.out.println("running");
    }
}

class Honda extends Bike2 {
    @Override
    void run() {
      System.out.println("running safely with 100kmph");
    }
}

class Bike3 {
    void run() {
      System.out.println("running");
    }
}

class Yamaha extends Bike3 {
    @Override
    void run() {
      System.out.println("running safely with 100kmph");
    }
}
页: [1]
查看完整版本: java关于final的用法