请问一个关于java抽象类里访问修饰符的问题
packagezhuanhuan;publicabstractclasszhuanhuan{protectedfloattemp;publiczhuanhuan(){}p...
package zhuanhuan;
public abstract class zhuanhuan {
protected float temp;
public zhuanhuan() {
}
public zhuanhuan(float temp1) {
temp=temp1;
}
protected abstract void convert();
}
******************************************
package huashi_sheshi;
import zhuanhuan.zhuanhuan;
class Huashi_Sheshi extends zhuanhuan{
Huashi_Sheshi(){
}
Huashi_Sheshi(float temp1) {
super(temp1);
}
void convert(){
System.out.println("从华氏温度到摄氏温度的转换");
System.out.println("*************************************");
System.out.println("摄氏温度为:"+temp);
System.out.println("华氏温度为:"+((temp-32)*5/9));
};
}
这两个类不在同一个包里,父类为一个抽象类,子类实现父类的抽象方法。jbuilder提示子类有误,但把子类的void convert(){} 改成protected void convert(){}就ok了
有点想不明白,我以为访问修饰符只是对继承他的子类有意义,难道父类也会反过来访问检测子类是否实现他的抽象方法吗? 展开
public abstract class zhuanhuan {
protected float temp;
public zhuanhuan() {
}
public zhuanhuan(float temp1) {
temp=temp1;
}
protected abstract void convert();
}
******************************************
package huashi_sheshi;
import zhuanhuan.zhuanhuan;
class Huashi_Sheshi extends zhuanhuan{
Huashi_Sheshi(){
}
Huashi_Sheshi(float temp1) {
super(temp1);
}
void convert(){
System.out.println("从华氏温度到摄氏温度的转换");
System.out.println("*************************************");
System.out.println("摄氏温度为:"+temp);
System.out.println("华氏温度为:"+((temp-32)*5/9));
};
}
这两个类不在同一个包里,父类为一个抽象类,子类实现父类的抽象方法。jbuilder提示子类有误,但把子类的void convert(){} 改成protected void convert(){}就ok了
有点想不明白,我以为访问修饰符只是对继承他的子类有意义,难道父类也会反过来访问检测子类是否实现他的抽象方法吗? 展开
展开全部
如果为void convert()则实际为friendly void convert()
friendly 比protect具有更低的访问权限。
所以jbuilder会提示你 "试图减弱访问权限"
补充:你可以思考下。如果父类A具有一个protected void P()的方法,子类B继承了父类P()的方法,把P()写成一个friendly的方法
再写一个C extends B类,C类则不具有P()的方法,而C的最终类又是A,说明C应该有P()方法,这不是矛盾么?
friendly 比protect具有更低的访问权限。
所以jbuilder会提示你 "试图减弱访问权限"
补充:你可以思考下。如果父类A具有一个protected void P()的方法,子类B继承了父类P()的方法,把P()写成一个friendly的方法
再写一个C extends B类,C类则不具有P()的方法,而C的最终类又是A,说明C应该有P()方法,这不是矛盾么?
展开全部
如果你没有写权限,默认就是包访问权限,而你两个类又不在一个包里,调用就会有问题,还有你对面向对象不是很清楚的时候,尽量不要使用抽象类,这和面向对象设计模式有关,还有就是组合优先继承,针对接口变成而不是类,这些可能有点抽象,慢慢你会理解的。
而且有继承关系的类,应该放到一个包里面。这也是设计原则之一
而且有继承关系的类,应该放到一个包里面。这也是设计原则之一
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
权限及范围
private->类内部
default->类内部,同包无继承关系类,同包子类
protected->类内部,同包无继承关系类,同包子类,不同包子类
public->类内部,同包无继承关系类,同包子类,不同包子类,不同包无继承关系类
private->类内部
default->类内部,同包无继承关系类,同包子类
protected->类内部,同包无继承关系类,同包子类,不同包子类
public->类内部,同包无继承关系类,同包子类,不同包子类,不同包无继承关系类
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询