Java:当我使用extends关键字实现多重继承时,不同包的不同类中未访问受保护的方法
Posted
技术标签:
【中文标题】Java:当我使用extends关键字实现多重继承时,不同包的不同类中未访问受保护的方法【英文标题】:Java: protected methods not accessed in different class of different package when I used extends keyword to achieve multiple inheritance 【发布时间】:2016-08-02 19:26:47 【问题描述】:我有以下两个课程: 测试.java
package com.test.app;
public class Test
public int a=10;
protected void testFunc()
// TODO Auto-generated method stub
System.out.println("Test class--> testFunc");
另一个是 主.java 包 com.test.main;
import com.test.app.Test;
public class Main extends Test
public static void main(String[] argv)
System.out.println("Main Method");
Main main =new Main();
main.testFunc(); // No Error
Test test = new Test();
test.testFunc(); // Error
Test 类型中的方法 test.testFunc() 不可见
【问题讨论】:
问题是什么? 是的,这就是包的工作方式。 这是一个功能...不是错误... 我无法在主方法中访问受保护的方法 我认为***.com/questions/16074621/… 链接会帮助你更多。 【参考方案1】:Test#testFunc()
方法只能用于子类(如Main
)和同一包中的类(com.test.app
)。
这就是为什么声明
main.testFunc();
编译良好(因为Main
是Test
的子类,并且可以调用testFunc()
)。
这个说法,然而
test.testFunc();
没有编译,因为Main
类所在的包不是com.test.app
,而是com.test.main
。
更多信息:
Difference betweenpublic
, default
, protected
, and private
【讨论】:
this, especially the top comment on the accepted answer 是您回答的一个很好的参考/证明:) 是的,我同意你的回答,但我的问题是我从超类扩展,所以在这种情况下,受保护的方法应该在不同的包中可用?? 所以在上面的 Main 类中可以获得 Test 类的特性,包括受保护的方法对吧!??但是当我使用 Test 类的对象时 testFunc() 在 Main 类中不可见,即 test.testFunc()以上是关于Java:当我使用extends关键字实现多重继承时,不同包的不同类中未访问受保护的方法的主要内容,如果未能解决你的问题,请参考以下文章