Java语言是否保证在构造函数中应用于instanceof
的{{1}}运算符或getclass()
方法始终适用于层次结构中的较深类?
例如,如果我想限制允许从超类调用构造函数的子类,我可以这样做:
this
但是我想知道语言是否保证它会工作。
是的,可以保证。
如果未显式指定super()
,则构造函数的第一个动作始终是对Object
的隐式调用。 (JLS)
强制执行此约束(而不是允许在任何时候调用父构造函数)的原因是,可以确保所有超类均被初始化,无论是Object
还是任何其他超类型。此时getClass
的每个实例方法都可以安全使用; library(ggplot2)
#fake data
dat <- data.frame(dens = c(rnorm(100),rnorm(100,2,0.5)),group = rep(c("C","P"),each = 100))
#fill the area under the curve
ggplot(dat,aes(x = dens,fill = group)) + geom_density(alpha = 0.75)
也不例外。
另请参阅Why do this() and super() have to be the first statement in a constructor?
,您的问题本质上是 哪个对象getClass
被调用?
JLS涵盖以下内容
关键字 this 只能在以下情况下使用:
- 类的构造函数的主体(第8.8.7节)
- ...
用作主要表达式时,关键字 this 表示 一个值,该值是对该对象的引用 实例方法或默认方法被调用(第15.12节), 或 正在构建的对象 。