java默认构造函数的访问权限

q956140151 2010-05-24 10:34:18
一道SCJP题:

Java code

class A {
A() {}
}

class B extends A {

}



Which two statements are true? (Choose two)

A. Class B's constructor is public.
B. Class B's constructor has no arguments.
C. Class B's constructor includes a call to this().
D. Class B's constructor includes a call to super().
答案是:BD

我想问:
默认的构造函数是public还是friendly?为什么A不对?
我试了下,把以上class A跟class B放在一个包里,在另外个包里new B(),可以正常运行啊,如果是friendly不是只有包的访问权限么。但如果给B加上构造函数:B(){}。则在包外不可以用B()。提示不可见。
...全文
475 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Huhaskii 2012-05-09
  • 打赏
  • 举报
回复
public类的默认构造方法是public的,你那个class A和class B都是友好类,友好类的默认构造方法是友好的,所以不是public的!!
q956140151 2010-05-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zangxt 的回复:]
类名是public的,则编译器自动生成的构造器是public的。
但题目中类名不是public的……
[/Quote]
谢谢。
ZangXT 2010-05-24
  • 打赏
  • 举报
回复
类名是public的,则编译器自动生成的构造器是public的。
但题目中类名不是public的……
q956140151 2010-05-24
  • 打赏
  • 举报
回复
package constractor;

public class ConSup {
ConSup(){}
}

package constractor;

public class ConSub extends ConSup {
//ConSub(){}
}

package test;

import constractor.ConSub;

public class Test {

public static void main(String[] args) {

ConSub sub = new ConSub(); }

}
这样子没有报错,即包外可见啊。
kuruby 2010-05-24
  • 打赏
  • 举报
回复
恩。就是这样的。
paullbm 2010-05-24
  • 打赏
  • 举报
回复
答案没有问题。
不知道你的相关测试代码和类文件名是否和题意完全相符!

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧