对于类:
默认的:可以在同一个包中的其它类中被访问,在同一个包中被其它的类所继承。
public:可以在任何一个包中的任何一个类中被访问和继承。
//--------------------------------------------------------------------------------------------------------------------
一个类作为整体对程序的其它部分可见,并不能代表类内的所有的域和方法也对程序的其它部分可见,前者是后者的必要条件,类的域和方法能否为其它所有类访问(含继承),还要看这些域和方法自己的访问控制符。
//---------------------------------------------------------------------------------------------------------------------
如果一个类的构造方法声明为private,则其它类不能生成该类的一个实例。
//---------------------------------------------------------------------------------------------------------------------
处在不同包中的子类虽然可以访问父类中限定为protected的成员,但访问这些成员的对象必须具有子类的类型或者子类的子类的类型,而不能是父类类型。
//---------------------------------------------------------------------------------------------------------------------
|
同一个类中
|
同一个包中
|
不同包中的子类
|
不同包中的非子类
|
private
|
允许
|
|
|
|
默认
|
允许
|
允许(子类和非子类)
|
|
|
protected
|
允许
|
允许(子类和非子类)
|
允许
(
仅子类,且无法通过子类的实例访问子类继承的
protected
方法
)
|
无法访问
protedted
方法
|
public
|
允许
|
允许(子类和非子类)
|
允许
|
允许(子类和非子类)
|
对于类成员:
//---------------------------------------------------------------------------------------------------------------------
子类可以继承父类中访问权限设定为public,protected的”默认的”的域变量及方法,但是不能继承访问权限为private的域变量和方法。
//---------------------------
不能同时使用的访问修饰符和非访问修饰符:
abstract与final不能同时修饰同一个类;
abstract与private,static,final或native不能并列修饰同一个方法;
abstract类中不能的private修饰的域和方法;
abstract 方法必须存在于abstract类中;
static 方法中不能处理非static的域。
示例代码:
package pkg1;
public class Country
{
protected String name;
protected void value()//friendly
{
name="China";
}
}
public class Country
{
protected String name;
protected void value()//friendly
{
name="China";
}
}
//------------------------
package pkg2;
import pkg1.Country;
public class Main6
{
public static void main(String[]args)
{
Country c=new Country();
//c.value();//错误
}
}
//子类可以继承父类中访问权限设定为public,protedted和friedly(默认的)的
//域变量和方法,但是不能继承访问权限设定为private的域变量和方法
class City extends Country
{
void setValue()
{
this.value();//正确
super.value();//正确
Country c=new Country();
//c.value();//错误:即访问protected成员的对象类型不能是父类类型
City cc=new City();
cc.value();//正确
}
}
import pkg1.Country;
public class Main6
{
public static void main(String[]args)
{
Country c=new Country();
//c.value();//错误
}
}
//子类可以继承父类中访问权限设定为public,protedted和friedly(默认的)的
//域变量和方法,但是不能继承访问权限设定为private的域变量和方法
class City extends Country
{
void setValue()
{
this.value();//正确
super.value();//正确
Country c=new Country();
//c.value();//错误:即访问protected成员的对象类型不能是父类类型
City cc=new City();
cc.value();//正确
}
}