我见过子类的构造器方法被用于具有超类类型的变量。例如:
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
格式化程序
是dateformat
类型对象还是simpledateformat
类型?由于类SimpleDateFormat
inherit fromDateFormat
,因此它的方法可能比它的超类多。实例格式化程序
调用这些函数是否只能存在于SimpleDateFormat
中,而不能存在于DateFormat
中?在这种情况下,dateformat
和simpledateformat
可以互换吗?例如:
SimpleDateFormat formatter = new DateFormat ("yyyy-MM-dd");
Java实例的类型由用于创建它的构造函数确定,并且不能更改。
可以在实例上调用的方法取决于用于引用该实例的变量的类型。因此,您可以在同一实例上调用不同的方法集,这取决于用于引用该实例的变量的类型。
仅用于引用实例的变量的类型可以是:
为什么第一个输出有柱线 = 空?是因为在创建类 B 之前调用了 B.foo() 吗?如果是,那么为什么可以调用 B.foo()?还是因为 B.foo() 中的字段栏试图从 A 获取柱线字段但无法访问它? 我的问题与链接的问题不同,我不是在问调用顺序,我是在问为什么第一个输出为空?另一个问题不是关于字段或空变量。 我不明白B.foo中的bar变量是如何为空的,如果它是在A和B中定义的。
问题内容: 我正在尝试创建一个将字段作为参数的构造函数,然后将其放入存储在超类中的字段中。这是我正在使用的代码 在超类中,我用 我有一个访问器方法 我收到一个错误“ 味道在超类中具有私有访问权 ”,但是我认为这无关紧要,因为我正在调用将其返回到字段的访问器方法? 问题答案: 您应该做什么: 在您的超类中添加一个构造函数: 在Crisps类中: 注释 对您的问题的一些评论: “在超类中,我已经用”
问题内容: 我有两个类,和,扩展了前一个类。 具有以下构造函数: 我将注意到所有实例变量都已设置为private。 同时,具有以下构造函数: 但是,这为我的构造函数引发了“找不到符号”错误。 我尝试使用,但是我的超类的私有范围阻止了这种情况。 我发现向我的构造函数中添加字段并允许我调用超级构造函数,但是我想知道是否存在一种无需在子类构造函数中传递其所有参数的情况下调用超级构造函数的方法? 问题答案
问题内容: 考虑以下代码: 如果我们在超类中有一个构造函数,那么我们为子类构造的每个对象(例如,用于类调用的对象及其父对象)都将调用它。 为什么会这样? 该程序的输出为: 在超类的构造函数中 在子类的构造函数中 总和是25 在超类的构造函数中 在子类的构造函数中 总和是29 问题答案: 因为它将确保在调用构造函数时,它可以依赖于其超类中已初始化的所有字段。 请参阅此处的 3.4.4
问题内容: 考虑以下代码 在我看来,目前有两种方法可以避免这种问题。 要么上A班最后一班。 要么 使getVar方法最终化 作者试图提出防止上述问题的方法。但是,该解决方案似乎很麻烦,因为要遵循一些规则。 http://benpryor.com/blog/2008/01/02/dont-call-subclass-methods-from-a- superclass-constructor/ 除了