基类protected方法的调用

spp111111111 2010-01-17 12:02:25
package a;
public class Base
{
protected void pro()
{
System.out.println("This is a protected method.");
}
}

package b;
import a.Base;
public class Derived extends Base
{
public static void main(String[] args)
{
Derived dr = new Derived();
dr.pro();
}
}

package b;

public class Another
{
public static void main(String[] args)
{
Derived dr = new Derived();
dr.pro(); //error
}
}

package a;
import b.Derived;
public class Another2
{
public static void main(String[] args)
{
Derived dr = new Derived();
dr.pro();
}
}

为什么是这样?
如何思考

...全文
227 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
xqh2168 2010-01-17
  • 打赏
  • 举报
回复
什么是这样
2到20个英文 2010-01-17
  • 打赏
  • 举报
回复
当前类 同一package 子孙类 其他package
public √ √ √ √
protected √ √ √ ×
friendly √ √ × ×
private √ × × ×
不写时默认为friendly
spp111111111 2010-01-17
  • 打赏
  • 举报
回复
我画了一张图, 大家看看是否有什么问题
licip 2010-01-17
  • 打赏
  • 举报
回复
正确![Quote=引用 1 楼 hedangqing 的回复:]
                  当前类 同一package 子孙类 其他package
        public    √      √        √      √
        protected  √      √        √      ×
        friendly  √      √        ×      ×
        private    √      ×        ×      ×
        不写时默认为friendly
[/Quote]
spp111111111 2010-01-17
  • 打赏
  • 举报
回复
认真看, 我问的问题是关于不同类的static方法对protected成员方法的访问。

面向对象首先要确定模型, 不考虑具体实现的情况下, 继承+访问权限的模型到底如何画?

huhk 2010-01-17
  • 打赏
  • 举报
回复
friendly就是默认的意思,没有写访问修饰符。
sagegz 2010-01-17
  • 打赏
  • 举报
回复
friendly第一次听说...
Yokubee 2010-01-17
  • 打赏
  • 举报
回复
java中访问修饰符public、private、protecte、default的意义讲解:
public: Java语言中访问限制最宽的修饰符,一般称之为“公共的”。被其修饰的类、属性以及方法不仅可以跨类访问,而且允许跨包(package)访问。
private: Java语言中对访问权限限制的最窄的修饰符,一般称之为“私有的”。被其修饰的类、属性以及方法只能被该类的对象访问,其子类不能访问,更不能允许跨包访问。
protect: 介于public 和 private 之间的一种访问修饰符,一般称之为“保护形”。被其修饰的类、属性以及方法只能被类本身的方法及子类访问,即使子类在不同的包中也可以访问。
default:即不加任何访问修饰符,通常称为“默认访问模式“。该模式下,只允许在同一个包中进行访问
SambaGao 2010-01-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hedangqing 的回复:]
                  当前类 同一package 子孙类 其他package
        public    √      √        √      √
        protected  √      √        √      ×
        friendly  √      √        ×      ×
        private    √      ×        ×      ×
        不写时默认为friendly
[/Quote]

...
spp111111111 2010-01-17
  • 打赏
  • 举报
回复
spp111111111 2010-01-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hedangqing 的回复:]
当前类 同一package 子孙类 其他package
public √ √ √ √
protected √ √ √ ×
friendly √ √ × ×
private √ × × ×
不写时默认为friendly
[/Quote]

访问权限没有这样简单吧.


比如:

package a;
public class Base
{
void def()
{
System.out.println("The default mothod of the base class.");
}
}


package a;
public class Derived extends Base
{
public static void main(String[] args)
{
Derived dr = new Derived();
dr.def();//888888correct8888888
}
}

package b;
import a.Base;
public class Derived2 extends Base
{
public static void main(String[] args)
{
Derived2 dr2 = new Derived2();
dr2.def();//********error*************
}
}


package a;
public class Another
{
public static void main(String[] args)
{
Derived dr3 = new Derived();
dr3.def();//************correct**********
}
}


这里涉及到外部接口和内部接口的问题

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧