请你抽根烟\n 2024-11-02 12:01 采纳率: 72%
浏览 26
已结题

java 的protected权限 ,问题在注释里

import gg.aa;
import java.util.*;

public class bb extends aa {//父类aa里只有一个protected 的属性 c ;

public int fw() {
aa ac=new aa();

  System.out.println(c);//这里可以直接访问到 
               父类c
  
  System.out.println(ac.c);//这里为什么对象访问不到,请简洁明了,不要那么深奥。
  return c ;
  }
  • 写回答

21条回答

  • 铭渊老黄 新星创作者: Python技术领域 2024-11-03 06:16
    关注
    🕒上午好,题主!目前:🟢[在线]
    📢参考GPT-4o mini 模型、由清水白石008整理提供!
    📣今日金句:成功不是终点,失败也不是致命的,继续前进的勇气才是最重要的。” — 温斯顿·丘吉尔
    

    在 Java 中,protected 权限修饰符的访问规则如下:

    1. 同一个包内的类:可以访问 protected 属性。
    2. 不同包中的子类:可以访问 protected 属性。
    3. 不同包中的非子类:无法访问 protected 属性。

    在你的代码中,bb 类是 aa 类的子类,因此可以直接访问 protected 属性 c。这就是你在 System.out.println(c); 中能够直接访问 c 的原因。

    然而,当你创建一个 aa 类的实例 ac 时,acaa 类的一个对象,而不是 bb 类的对象。由于 ac 是在不同的包中(假设 bbaa 不在同一个包中),你不能通过 ac 来访问 protected 属性 c。这就是为什么 System.out.println(ac.c); 会导致编译错误。

    总结:

    • 直接访问 protected 属性:可以通过子类直接访问。
    • 通过父类实例访问 protected 属性:不可以,除非在同一个包中。
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(20条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 11月3日
  • 已采纳回答 11月3日
  • 创建了问题 11月2日