rt,final修饰的变量不是不能修改吗,下面的代码行吗,大家看看。不过确实没问题。class Fruite {
final int price = 5;
}class Orange extends Fruite {
final int price = 10;
}public class SweetOrange extends Fruite {
final int price = 20;
public static void main(String[] args) {
Fruite f=new SweetOrange();
Orange o=new Orange();
System.out.println(f.price|o.price);
}
}

解决方案 »

  1.   

    f是Fruite类的引用,f.price自然输出的是Fruite的price 5,所以并没有改变值
      

  2.   


    class Fruite {
    final int price = 5;
    }public class SweetOrange extends Fruite {

    public static void main(String[] args) {
    SweetOrange f = new SweetOrange();
    f.price=100;//报语法错误,表名,父类的final变量不能被修改
    System.out.println(f.price);
    }
    }你在子类中final int price = 20;  -- 这个price和父类的price已经不一样了!!!
      

  3.   

    楼上说的在理,其实子类确实继承了父类的成员变量price的值,但是子类中又定义了一下price变量,相当于父类的成员被覆盖了,所以不能算是修改final修饰的变量。如果在main函数中试图去修改的话,那肯定会报不能修改的错的。
      

  4.   

    子类里面可以重写final型变量但不能直接修改,你的代码里是变量的重写而不是修改,所以是合理的