3-1课程里的疑问

3-1课程里的疑问

1、final 方法:该方法不允许被子类重写
那么,该方法是不是也不允许被子类重载呢?
2、老师,在课程里,final限定方法里的局部变量temp,可以:
    final int temp=10;
也可以先声明,在赋值:
    final int temp;
    temp=10;
最后打印:System.out.println(temp);
那么,能不能这样写:
    final int temp;
    System.out.println(temp=10);
也就是说,在打印里才赋值,可以吗?
还有,被final修饰的局部变量,是不是只有一次赋值的机会?要么声明赋值,要门先声明后赋值,反正赋值的机会仅限1次?

3、给一个成员变量前加final:
public final int temp;
根据课程可知,temp要门在声明的时候就赋值,要门得在构造代码块或者构造方法中有一次机会为temp赋值。老师,为什么只能在构造方法和构造代码块里对temp进行赋值?
还有,能不能通过对象实例化时,通过构造方法传参的形式对temp进行初始化赋值?如:
public Animal(String name,int month,int temp){
    this.temp=temp;
}
这样对被final修饰的temp赋值方式可以吗?

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

你好!

1、关于第一个问题,老师是说,下面的代码是可以执行的,并且赋值机会只有一次。其实下面的代码同学可以在开发工具中尝试一下。

inal int temp;
System.out.println(temp=10);

2、关于第二个问题,首先这个就是Java的语法规则,另外,如果不赋值的话,则生成的对象中final变量的值是未知的,编译器也会直接报错,因此必须进行初始化,也就是要么定义的时候就赋值,要么在构造方法和构造代码块中赋值。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 鱼儿0001 提问者 #1
    我前几天有在开发工具里尝试,是可以的。谢谢老师
    2019-05-05 12:00:28
好帮手慕阿莹 2019-05-01 21:10:15

1、是的,不可以被子类重载

2、可以的,是的同学可以这样理解。

3、在构造方法中或者构造代码块儿中都是类实例化的时候只调用一次的,所以,符合只能一次对temp赋值的要求。

4、public Animal(String name,int month,int temp){
    this.temp=temp;
}

这种方法是可以的,因为调用一次构造方法就相当于创建了一个对象,不会再次调用该构造进行改变要赋值的temp,(因为再调用构造方法就是new一个新对象了)

如果我的回答解决了你的问题,请采纳,祝学习愉快.

  • 提问者 鱼儿0001 #1
    老师,1、在我的问题2里,你说:是的,可以这样理解。指的是我的哪个问题:也就是说,在打印里才赋值,可以吗? 还有,被final修饰的局部变量,是不是只有一次赋值的机会?要么声明赋值,要门先声明后赋值,反正赋值的机会仅限1次?2、我在问题3里首先问了你一个问题,老师竟然春梦无痕般的miss了:给一个成员变量前加final: public final int temp; 根据课程可知,temp要门在声明的时候就赋值,要门得在构造代码块或者构造方法中有一次机会为temp赋值。老师,为什么只能在构造方法和构造代码块里对temp进行赋值?
    2019-05-02 14:03:49
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师