1、访问权限符:
(1)public:
对于成员来说:任何其他类都可以访问它们,不管在同一个包中还是在另外的包中。
对于类来说: 也是一样。
(2)friendly:
对于成员老说:如果一个类的成员没有任何权限修饰,那么它门就是缺省包访问权限,用friendly来表示,注
意friendly不是Java中的关键字,这里是个人喜欢的方式用它表示而已。同一个包内其它类可以访问,但包外
就不可以。对于同一个文件夹下的、没有用package的classes,Java会自动将这些classes初见为隶属于该目录
的default package,可以相互调用class中的friendly成员。如以下两个class分别在同一个文件夹的两个文件
中,虽然没有引入package,但隶属于相同的default package。
class Sundae{
//以下两个方法缺省为friendly
Sundae(){}
Void f() {System.out.println(“Sundae.f()”);
}
public class IceCream{
public static void main(String[] args){
Sundae x = new Sundae();
x.f();
}
}
对于类来说:同一个包中的类可以用。总之,类只可以声明为public或者friendly。
(3)private:
对于对于成员来说:只能在该成员隶属于的类中访问。
class Sundae{
private Sundae(){}//只能在Sundae class中被调用
Sundae(int i) {}
static Sundae makASundae() {
return new Sundae();
}
}
public class IceCream{
public static void main(String[] args){
// Sundae class中构造函数Sundae()是private,
// 所以不能用它进行初始化
//Sundae x = new Sundae();
Sundae y = new Sundae(1);//Sundae(int)是friendly,可以在此调用
Sundae z = Sundae.makASundae();
}
}
对于类来说:类不可以声明为private。
(4)protected:
对于对于成员来说:相同包中的类可以访问(包访问权限);基类通过protected把基类中的成员的访问权限赋予派生类不是所有类(派生类访问权限)。
例子:package c05.local;
import pack1.Cookie;
//注意:在这里ChocolateChip继承了类Cookie,按道理bite()方法也在
//ChocolateChip中,可以用x.bite直接调用,但是不可以的,因为类ChocolateChip
//和Cookie类不在一个包中,各自具有包访问权限,为了能够使用x.bite()必须要把
//Cookie方法的访问权限换成public或者protected,但是一旦换成public所有的人就
//可以访问了,这样达不到隐私的要求,所以设置成protected最好,既可以顺利访问,也可以
//避免外面的类调用,保护好隐私的作用
public class ChocolateChip extends Cookie {
public ChocolateChip() {
System.out.println("ChocolateChip constructor");
}
public static void main(String[] args) {
ChocolateChip x = new ChocolateChip();
x.bite(); // Can't access bite
}
} ///:~
package pack1;
public class Cookie {
public Cookie()
{
System.out.println("Cookie constructor");
}
protected void bite(){System.out.println("bite");}
}
对于类来说:类不可以声明为protected
对于类的权限修饰,下面有更好的解释:
Class类的访问权限:
public:可以供所有的类访问。
默认:默认可以称为friendly但是,java语言中是没有friendly这个修饰符的,这样称呼应该是来源于c++。默认的访问权限是包级访问权限。
即如果写了一个类没有写访问权限修饰符,那么就是默认的访问权限,同一个包下的类都可以访问到,即使可以实例化该类
(当然如果这个类不具有实例化的能力除外,比如该类没有提供public的构造函数)。
说明:
1、每个编译单元(类文件)都仅能有一个public class
2、public class的名称(包含大小写)必须和其类文件同名。
3、一个类文件(*.java)中可以不存在public class。
这种形式的存在的场景:如果我们在某个包内撰写一个class,仅仅是为了配合同包内的其他类工作,而且
我们不想再为了撰写说明文档给客户(不一定是现实意义的客户,可能是调用这个类的类)看而伤脑筋,而且有可能过一段时间之后
有可能会彻底改变原有的做法,并完全舍弃旧版本,以全新的版本代替。
4、class不可以是private和protected。
5、如果不希望那个任何产生某个class的对象,可以将该类得所有构造函数设置成private。但是即使这样也可以生成该类的对象,就是class的static的成员(属性和方法)可以办到
分享到:
相关推荐
Java 作为一种面向对象的编程语言,提供了四种访问权限修饰符,它们分别是 `public`、`protected`、`default`(通常称为“包访问”或“友好访问”,文中提到的 `friendly` 实际上就是 `default`)和 `private`。...
- 类:Java不支持private类,这意味着类至少是friendly的,可以被同一包内的其他类访问。 4. **protected**: - 成员:在同一包内和所有子类中可访问。这种权限通常用于基类的成员,允许子类进行继承并访问或重写...
Java修饰符在编程中起着至关重要的作用,它们用于控制类、接口、变量和方法的访问权限以及实现其他特性。本文将深入探讨Java中的访问修饰符及其应用。 首先,我们来了解一下类的访问修饰符: 1. **public**:公共...
4. **友善访问修饰符/friendly/default**:友善访问不写任何修饰符,它只允许同一包内的类访问。如果尝试在不同包内访问友善成员,将会导致编译错误。 5. **私有保护访问修饰符(private protected)**:在某些文献...
- 缺省(无修饰符): 也称为package-private或者friendly,表示只能在同一包内的其他类访问。 - `class`: 关键字,用于声明类。 - `classname`: 类名,用于标识该类。 - `extends superclassname`: 表示继承父类,...
3. `friendly`(默认,没有修饰符):同一包内的类可以访问。 4. `private`:只有在同一类内可以访问。 类的定义可以包含这四个修饰符,例如: ```java public class MyClass { ... } ``` 表示这个类是公开的,可以...
【JAVA笔试题集锦(1-30)基础部分】主要涵盖了Java编程语言的基础概念,包括访问修饰符、匿名内部类、静态嵌套类、逻辑运算符、集合接口与工具类、断言、字符串对象创建、数值处理以及类型转换等方面的知识。...
- `friendly`(默认):同一包内可以访问,但不是关键字,常指包访问权限。 2. **ArrayList vs Vector,HashMap vs Hashtable**: - `ArrayList`和`Vector`都是动态数组,用于存储有序的元素。`Vector`是线程...
- 默认的访问权限在Java中被称为包级私有,它允许在定义类的包内访问,但不允许跨包访问。 2. **匿名内部类** - 匿名内部类没有名称,通常用于简洁地实现接口或继承一个类的简短版本。 - 它不能继承其他类,但...
- **protected**: 受保护修饰符,被声明为protected的成员可以在同一个包内或者不同包中的子类中被访问。 - **默认(friendly)**: 如果没有显式地指定任何访问修饰符,则该成员具有默认访问权限,即只在同一包内的...
3. 默认(无修饰符或称为友好`friendly`):成员只对本类和同一包内的类可见。 4. `private`:私有访问权限,仅限于本类内部使用。如果一个类的构造器声明为private,其他类无法直接实例化该类。 【类的封装】 ...
- `缺省(default)`: 也称为包访问权限,允许在同一包内的类访问,子类和不同包的类无法直接访问。 访问权限总结如下表: | 作用域 | 当前类 | 同一 package | 子孙类 | 其他 package | | ------------- | -...
- 默认(friendly):只限于同一包内的类访问。 10. **重载方法**: - 重载方法要求参数列表不同(参数个数、类型或顺序),返回类型不影响重载。 以上是Java编程中的一些重要知识点,理解和掌握这些概念对于...
- **friendly/缺省**:默认访问级别,只允许同一包内的类访问。 - **private**:私有成员只能在定义它的类内部访问。 - **protected**:保护访问权限,允许同一包内的类和不同包的子类访问。 3. **面向对象原则*...
- 缺省(friendly): 默认访问级别,只允许在同一包内的类访问。 访问权限的范围如下: - public: 所有类 - protected: 同包类 + 子类 - friendly: 同包类 - private: 同类 3. **匿名内部类**: - 匿名内部...
- 重载(Overloading)是指在同一个类中,方法名相同但参数列表不同的方法。 - 覆盖(Overriding)是子类对父类方法的重新定义,要求方法名、参数列表和返回类型完全一致。 - 重载的方法可以改变返回类型,但覆盖...