我正在学习超类和子类。 我必须创建一个超类(Campsite)然后 两个子类(FrontCountry和BackCountry),其中一个子类有两个额外的子类(Serviced和Unserviced)。 到目前为止还不错,我可以做到这一切。 但是我最后问了这个问题。
*在CampTester中,编写另一个名为statistics的静态Java方法,该方法将Campsite对象的数组作为参数,并确定并输出以下内容:
每个对象的属性值
Terra Nova国家公园,纽芬兰和拉布拉多的Front Country站点总数
Newman Sound,Terra Nova国家公园,纽芬兰和拉布拉多的服务站点总数(30安培服务)
Gros Morne国家公园,纽芬兰和拉布拉多的所有Back Country遗址的位置
按地点编号列出Malady Head,Terra Nova国家公园,纽芬兰和拉布拉多所有未服务地点的清单
我尝试使用增强的for循环来打印我创建的数组中每个对象的属性。很简单。问题在于我无法访问可以从我需要计算和呈现的子类中检索信息的方法。(getLocation,getAmpService,get省等方法)
IN ESSENCE:
是否可以从该子类外部访问子类中定义的方法(层次结构中较高)?
答案 0 :(得分:1)
应该在Campsite类中定义类变量位置,并且应该保护它。受保护的类变量是继承的。露营地类还应具有公共getLocation()和setLocation()方法。子类将继承location,getLocation()和setLocation()。 Campsite的任何实例(包括子类实例)都将具有camp.getLocation()方法。
答案 1 :(得分:0)
到目前为止,使用您的代码会更容易回答,但基本上如果您的FrontCountry类扩展了您的Campsite类,并且您有一系列营地,您可以执行以下操作来访问FrontCountry方法:
if (campSiteArray[0] instanceof FrontCountry){
((FrontCountry)campSiteArray[0]).frontCountryMethod();
答案 2 :(得分:0)
JLaudio的回答绝对正确。我还想补充说,超类不能访问子类方法(因为你的缩写问题可能是建议的)。这样做的原因是类结构允许子类比其父类更专业。因此,在子类(FrontCountry或BackCountry)中专门定义的方法将无法用于要调用的Campsite对象。
答案 3 :(得分:0)
我不确定我是否正确理解了您的问题,但是当您访问子类中的方法时,您似乎没有进行转换。
假设getLocation,getAmpService方法仅存在于FrontCountry中,而不存在于超类Campsite中。在您想要访问这些方法之前,需要将对象强制转换为FrontCountry。
if (campsite instanceof FrontCountry) {
FrontCountry frontCountry = (FrontCountry)campsite;
frontCountry.getLocation();
frontCountry.getAmpService();
}