匿名用户
1级
2019-02-20 回答
public,protected,default,private,这四种级别的修饰符都可以用来修饰类、方法和字段。
包外 子类 包内 类内
public yes yes yes yes
protected no yes yes yes
default no no yes yes
private no no no yes
protected 除了不同包不能访问 ,其他都能访问的
而且你的理解不对,被设置成protected的类,里面的内部类 是不可以 被其他类访问的。builder类是AlertDialog的内部类,而且是静态的,AlertDiaglog当然能调用。
。AlertDialog声明protected的构造函数就防止了外部代码不通过builderd类而直接去new对象而已。
追问:
是不是理解为设定为protected的类必须透过内部类的新建对象?
追答:
设置成内部类的真正原因是: 由于对话框类 有许多参数, 而Builder内部类返回值也是Builder对象,这样可以链式一路点下去设置 参数,为了方便才这么设计的。 这是Java中的一种设计模式。 不是protected类必须通过内部类新建对象。而是设置成 Aalertdialog的构造方法为protected,外部不能new。
追问:
一路点下去,意思是不是就是Builder.a.c之类的?假设a,c存在的话,那么a是Builder的方法?然后c是隶属于a方法里面的方法或者内部类咯?能这样理解吗?存不存在一种可能就是a,c都是Builder的方法?一直很想问这个问题了。。。。
追答:
你看下他的源码就知道了啊 !!
AlertDialog.Builder builder =newAlertDialog.Builder(this);
builder.setMessage("Are you sure you want to exit?")
.setCancelable(false)
.setPositiveButton("Yes",newDialogInterface.OnClickListener(){
publicvoid onClick(DialogInterface dialog,int id){
MyActivity.this.finish();
}
})
.setNegativeButton("No",newDialogInterface.OnClickListener(){
publicvoid onClick(DialogInterface dialog,int id){
dialog.cancel();
}
});
一直点下去 链式 设置属性