为什么getPlatformId()
在子类方法SalesforcePlatform
中对getPlatformName()
不可见?代码块不完整。 SalesforcePlatform
是Platform
的孩子。它与Platform
不同,但这不应阻止它访问Platform的受保护方法,对吗?
很抱歉,如果我错过了一些明显的事情
package com.dragon.dictionary;
public class Platform extends RepositoryObject
implements IPlatform{
protected final Long id ;
protected final String name;
protected static final String platformDbTbl = DragonConstants.TABLE_PREFIX + "platform";
protected Platform(Long platformId, String platformName){
id = platformId;
name = platformName;
};
protected Platform(String platformName){
Platform platform = Platform.getPlatformByName(platformName);
id = platform.getPlatformId();
name = platformName;
};
protected Long getPlatformId(){
return this.id;
};
protected String getPlatformName(){
return this.name;
}
....
}
package com.dragon.dictionary.salesforce;
import com.dragon.dictionary.Platform;
public class SalesforcePlatform extends Platform{
// prevent instantiation
private SalesforcePlatform() {
super("salesforce");
}
private SalesforcePlatform(Long platformId, String platformName) {
super(platformId, platformName);
}
public static SalesforcePlatform getPlatformByName(String platformName){
Platform platform = Platform.getPlatformByName(platformName);
SalesforcePlatform salesforcePlatform = new SalesforcePlatform(platform.getPlatformId(), platform.getPlatformName());
return salesforcePlatform;
}
}
编辑:
谢谢!所以根据回答,你是说,这将在子类中起作用:
private SalesforcePlatform(Platform platform) {
this.id = platform.getPlatformId();
this.name = platform.getPlatformName();
}
答案 0 :(得分:4)
您不是从子类调用受保护的方法,而是从静态方法调用。 静态方法在子类中定义的事实是无关紧要的。
编辑:
谢谢!所以根据回答,你是说,这可以在子类中起作用
新的更新代码有两个问题:
- 您的PlatForm
类没有默认构造函数,因此您需要调用超级构造函数并传递参数
- 您要分配的字段是最终的。它们已经由你的超类构造函数设置。
答案 1 :(得分:2)