2 lug0701 lug0701 于 2016.09.24 15:50 提问

java中常量在子类的继承问题

各位大神帮忙看看:
public class Base {
public static final String FOO = "foo";
}
class Sub extends Base {
public static final String FOO="bar";
}
public static void main(String[] args) {
Base b = new Base();
Sub s = new Sub();
System.out.print(Base.FOO);
System.out.print(Sub.FOO);
}
结果 foobar
常量在Base里面已经初始化,为什么在子类Sub里面能被覆盖

4个回答

quasimodo_es
quasimodo_es   2016.09.24 16:18
已采纳

语法就是如此啊:
final类不能被继承。
final方法不能被子类的方法覆盖,可以被继承。
final成员变量表示常量,只能被赋值一次,赋值后值不再改变。子类可以覆盖,但是不常用。

a541995149
a541995149   2016.09.24 17:44

覆盖本来就是这个意思,A继承了B,那么A中有跟B一样的内容,就会调用A中的内容,如2楼所说,这就是语法啊。
你可能以为Base的final FOO变量被修改了,其实没有,你通过((Base) Sub).FOO还是可以得到Base变量初始化的FOO,他们属于两个不同类对象的静态变量。你通过Sub.FOO就得到子类的FOO

lovehoney19
lovehoney19   2016.09.24 16:07

子类把那个常量继承过来,重写了吧

wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.09.24 18:21
 首先,static修饰的成员属性是类属性,就是直接通过类名访问的属性,它不存在集成这种概念的。
其次,final修饰的String类型是字符串常量,它的值在类加载的时候被赋值初始化之后,是不允许再次修改的。
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
简单介绍java中的子类与继承
说到java中类与继承 第一个点就子类的继承性 1.子类与父类在同一包中的继承性 子类自然继承父类中非private成员变量(四种权限:public protected 友好访问权限  private),非private的方法作为自己的方法,其中的访问权限不变 2.子类与父类不在同一包中的继承性 父类中的private和友好权限的成员变量不会被子类继承,其规则如上 第二个点是成
JAVA学习心得(二)-继承
学习内容 继承(extends) 首先继承分为三个部分进行了讲解:成员变量、成员函数、构造函数。                  核心内容: 变量是拿来用,并在堆内存中开辟空间;如果变量名冲突可以用super关键词调用(成员函数也可以)。函数如果相同(定义完全相同)则会在子对象中进行重写。构造函数由于和类名相同,所以不会存在相同的情况;子对象的构造函数默认会有
使用继承需要注意事项
使用继承注意两点: 第一:子类无法继承private修饰的属性和方法 第二:子类无法继承父类的构造方法 子类除了继承父类的属性和方法之外,还可以有自己的属性,但是调用从父类继承的方法却不能获取,比如: public class PersonnelDept extends Department{ private int count;//本月计划招聘人数 } 这段代码中,我们的子类人
Java中的继承,多态,抽象类
面向对象最后一个特性:多态 多态:对象的多种形态 【继承是实现多态的基础】 1.引用多态 父类的引用可以指向本类、子类的对象 2.方法多态 多态中的引用类型转换: 1.向上类型转换  小类型——大类型 2.向下类型转换  大类型——小类型 解决类型转换的安全性问题:instanceof 创建一个子类对象dog =  new dog();
常量的复用
常量的复用层次有五层:跨应用共享常量、应用内共享常量、子工程内共享常量、包内共享常量、类内共享常量。 1) 跨应用共享常量:放置在二方库中,通常是 client.jar 中的 constant 目录下。 2) 应用内共享常量:放置在一方库的 modules 中的 constant 目录下。 反例:易懂变量也要统一定义成应用内共享常量,两位攻城师在两个类中分别定义了表示 “是
Java基础入门-继承,多态,抽象类...
什么是继承:          继承是在现有类的基础上构建新的类用来满足新的要求.在继承过程中,新的类继承原来的方法和实例变量,并且能添加自己的方法和变量.   派生类:          继承是指声明一些类,可以进一步声明这些类的子类,而子类具有父类拥有的一些方法和属性,这跟现实中的斧子关系十分相似,所以面向对象把这种机制成为继承.子类也称为派生类. 父类又称基类,超类 子类又称
c++继承的访问控制
//1.子类拥有父类所有的成员变量和成员方法(除了构造和析构之外的成员方法)。但是这些成员的访问属性,在 //派生过程中是可以调整的。 //2.子类就是一种特殊的父类 //3.子类对象可以当作父类对象使用(比如父类做函数参数,可以传入子类对象) //4.子类可以拥有父类没有的方法和属性 //public修饰的成员变量、方法,在类的内部和外部都能使用 //protected修饰的成员变量
常量的五层复用层次
来自阿里编码规范【推荐】常量的复用层次有五层:跨应用共享常量、应用内共享常量、子工程内共享常量、包内共享常量、类内共享常量。 存放位置如下1) 跨应用共享常量:放置在二方库中,通常是 client.jar 中的 const 目录下。 2) 应用内共享常量:放置在一方库的 modules 中的 const 目录下。 反例:易懂变量也要统一定义成应用内共享常量,两位攻城师在两个类中分别定义
c++ 父类和子类的继承
// ConsoleApplication4.cpp : 定义控制台应用程序的入口点。 //#include "stdafx.h" #include <string> #include <iostream> using namespace std; //下面定义一个父类 class guozhu{ protected: int age; public : void setAge
C++接口定义,实现,继承接口类的子类,实例对象访问方法问题
#include using namespace std; #define interface class __declspec(novtable) interface ICodec { public: virtual bool Decode(char * lpDataSrc,unsigned int nSrcLen,char * lpDataDst,unsigned