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();

编译良好(因为MainTest 的子类,并且可以调用testFunc())。


这个说法,然而

test.testFunc();

没有编译,因为Main类所在的包不是com.test.app,而是com.test.main

更多信息:

Difference between public, default, protected, and private

【讨论】:

this, especially the top comment on the accepted answer 是您回答的一个很好的参考/证明:) 是的,我同意你的回答,但我的问题是我从超类扩展,所以在这种情况下,受保护的方法应该在不同的包中可用?? 所以在上面的 Main 类中可以获得 Test 类的特性,包括受保护的方法对吧!??但是当我使用 Test 类的对象时 testFunc() 在 Main 类中不可见,即 test.testFunc()

以上是关于Java:当我使用extends关键字实现多重继承时,不同包的不同类中未访问受保护的方法的主要内容,如果未能解决你的问题,请参考以下文章

类的继承

2018暑期周总结报告

Java 继承

接口的作用

extends 继承

java中extends和implements的区别