首页 > 试题广场 >

在Java中,已知类com.demo1.P中定义protec

[单选题]
在Java中,已知类com.demo1.P中定义protected修饰属性,类A和B分别在包com.demo2中,代码片段如下:
class P{
  protected String name;
}
class A{
   public void m(){
        P p = new P();
       System.out.println(p.name);
   }
}
class B extends P{
  public void m(){
      System.out.println(this.pname);
  }
}
阅读上述代码,下面分析中说法正确的是?
  • 类A中代码可以正常执行,可以直接访问protected属性
    但是类B中编译错误
  • 类A中代码编译错误,不能访问不同包的类中protected属性
    类B中可以通过编译,因为子类可以访问父类protected方法
  • 类B中代码编译错误,因为不同包中类不能直接访问
    类A中编译错误
  • 类A类B中代码都可以编译通过
如果B不是继承了P,也无法访问protected的属性,protected的属性需要同一个包下或者其子类才能访问
发表于 2021-09-03 14:17:05 回复(0)
这题有问题,B打印的pname而不是name,所以咋都是错的
发表于 2021-10-25 10:46:01 回复(0)
我有个疑问:P类不是public 而是默认修饰符,而B类和P类位于不同包,B怎么继承P ???
发表于 2022-09-20 11:20:20 回复(1)
在不同的包下,子类可以访问父类的protected属性,不能访问父类的protected方法,题目是不是有问题
发表于 2022-04-20 14:21:13 回复(0)
大意了。以为一个包下
发表于 2021-08-25 11:41:51 回复(0)