关于protected访问权限的疑惑!
我写的两个测试程序:
test.java
/////////////////////////////
package cn.mytest;public class Test
{
public void pubmethod()
{
System.out.println("Test's pubmethod()");
}
protected void promethod()
{
System.out.println("Test's promethod()");
}
void defmethod()
{
}
private void primethod()
{
}
}Test2.java
/////////////////////////////////
package com.wingsunlight;import cn.mytest.Test;
public class Test2 extends Test
{
/*public void fn()
{
//pubmethod();
promethod();
//defmethod();
//primethod();
}*/
/*public void promethod()
{
System.out.println("Test2's promethod()");
}*/
public static void main(String [] args)
{
Test t=new Test();
t.promethod();
Test2 t2=new Test2(); //t.pubmethod();
t2.promethod();
//t.defmethod();
//t.primethod();
}
}
编译过程如下:javac test.java 没有任何问题
接着编译:javac Test2.java 报错如下:
D:\java编程\test>javac test2.java
test2.java:21: promethod() 可以在 cn.mytest.Test 中访问 protected
t.promethod();
^
1 错误
问题:test2这个类是从test继承来的,promethod()方法的访问权限是proctected。应该在test2中是可以访问的,为什么还会出这样的编译报错那?恳请高手指教。谢谢!
我写的两个测试程序:
test.java
/////////////////////////////
package cn.mytest;public class Test
{
public void pubmethod()
{
System.out.println("Test's pubmethod()");
}
protected void promethod()
{
System.out.println("Test's promethod()");
}
void defmethod()
{
}
private void primethod()
{
}
}Test2.java
/////////////////////////////////
package com.wingsunlight;import cn.mytest.Test;
public class Test2 extends Test
{
/*public void fn()
{
//pubmethod();
promethod();
//defmethod();
//primethod();
}*/
/*public void promethod()
{
System.out.println("Test2's promethod()");
}*/
public static void main(String [] args)
{
Test t=new Test();
t.promethod();
Test2 t2=new Test2(); //t.pubmethod();
t2.promethod();
//t.defmethod();
//t.primethod();
}
}
编译过程如下:javac test.java 没有任何问题
接着编译:javac Test2.java 报错如下:
D:\java编程\test>javac test2.java
test2.java:21: promethod() 可以在 cn.mytest.Test 中访问 protected
t.promethod();
^
1 错误
问题:test2这个类是从test继承来的,promethod()方法的访问权限是proctected。应该在test2中是可以访问的,为什么还会出这样的编译报错那?恳请高手指教。谢谢!
解决方案 »
- 关于java基础知识的问题?
- mousereleased事件的一个疑问
- java播放声音的问题!~
- String.split如何忽略大小写进行匹配?
- 基本数据类型打印到文件
- 这个是什么问题
- 开发Servlet需要JSDK,那JSDK是在jdk目录下面吗?
- 菜鸟帖,求指导,在线等
- 如何生成下拉菜单
- 程序为什么会有这样的错误java:18:package oracle.jdbc.driver does not exist DriverManager.registerDriver(new oracle.jdbc.driver.Or
- java 有什么好书介绍?
- 小弟做的网站 提供几百个视频教程 + 技术文章!望多多支持!
{
Test t=new Test();
t.promethod(); //这里是错的
Test2 t2=new Test2(); //t.pubmethod();
t2.promethod();
//t.defmethod();
//t.primethod();
} 1 Test的promethod方法是protected,也就是不能通过Test的实例来调用promethod
2 Test2继承Test,对Test2来说,promethod是可见的,也就是可以调用的,但是这里的调用是通过Test2的实例来调用的,同样的,如果Test2里new一个Test对象,并调用该Test对象的promethod方法,也是会出错的,原因就是1说的。
---
胡说,protected有些时候是必要的。在一些时候你不需要将方法给其它类调用,但是需要给子类调用的时候是很有用的。
public void test(){
promethod ();}
protected是包可见的。
在非继承的情况下,不同的包中是不能调protected方法的。