JAVA主要修饰符
- 格式:doc
- 大小:72.50 KB
- 文档页数:29
JAVA主要修饰符
武汉理工大学计算机科学与技术学院 软件工程1001班 郑森文
主要的java修饰符分为:访问修饰符(package 、public、private、protect、default(friendly));修饰符(final、static、abstract)。在java中default这个修饰符并没有显式的声明。
而不同的修饰符其使用对象不大一样,主要对象有:类、接口、方法、变量、初始化函数等。
类的修饰符分为:可访问控制符和非访问控制符两种。
一、限定访问权限的修饰符
在java中,限定访问权限的修饰符主要有public 、private 、protected 和default。
1、访问权限修饰符修饰成员变量和方法
pubilc:
用pubilc修饰的成分表示是共有的,也就是说,它可以被其他任何对象访问
private:
和它的名字“私有”一样,类中限定为private的成员只能被这个类本身访问,在类外不可见
protected:
用该关键字修饰的成分是受保护的,只可以被同一包及其子类的实例对象访问
eg:class A
{
protected int weight;
protected int f( int a,int b )
{
// 方法体
}
}
假设B与A在同一个包中,则
class B
{
void g()
{
A a=new A();
A.weight=100;//合法
A.f(3,4); //合法
}
}
特别说明:什么是在同一个包中?
答:用package打包在一起的class ,叫在同一个包中。(不明白,举个例子) eg:在JDK的src\java\io中,你会看到许多java类,第一句源代码都是package java.io;
没有使用package打包的,在同一目录下的类也会被视做同一个包。
default:在这种情况下中,同protected。区别在第二和第三种情况中。
eg: class A
{
int weight ;
int f( int a,int b )
{
// 方法体
}
}
假设B与A在同一个包中,则
class B
{
void g()
{
A a=new A();
A.weight=100;//合法 A.f(3,4); //合法
}
}
private: 只能在本类中访问。
eg: class Test
{
private int money;
Test()
{
money=2000;
}
private int getMoney()
{
return money;
}
public static void main(String args[])
{
Test te=new Test();
te.money=3000; //合法
int m=te.getMoney(); //合法
System.out.println("money="+m);
} }
PS: 实际上,把重要的数据修饰为private,然后写一个public的函数访问它,正好体现了OOP的封装特性,是OOP安全性的体现。
2、访问权限修饰符修饰类
1)不能用protected和private修饰类。
2)用default修饰的类叫友好类,在另外一个类中使用友好类创建对象时,要保证它们在同一包中。
3、访问权限修饰符与继承
这里的访问修饰符指的是修饰成员变量和方法。可以分为两种情况:
1)子类与父类在同一包中
此时只有声明为private的变量与方法不能被继承(访问)。
eg:
class Father
{
private int money ;
int weight=100;
}
class Son extends Father
{
viod f()
{
money=10000;// 非法
weight=100; // 合法
}
}
2)子类与父类不在同一包中
此时private与default均不能被继承(访问),
protected与public可以。
eg:
Father.java
package com.aaa
public class Father
{
int height ;
protected int money=120; public int weight;
protected int getMoney()
{
return money;
}
void setMoney(int newMoney)
{
money=newMoney;
}
}
Son.java
package com.bbb
import com.aaa.Father;
public class Son extends Father
{
void f()
{
money=10000; //合法
//height=170; //非法,height为default修饰的变量
System.out.println(money);//输出结果是10000
//setMoney(300); //非法
int number=getMoney(); //合法 System.out.println(number);//输出结果是10000
}
public static void main(String args[])
{
Son sss=new Son();
sss.f();
}
}
所以,访问权限修饰符权限从高到低排列是:
public ,protected ,default, private
二、存储方式修饰符static
static既可修饰数据成员,又可以修饰成员方法,表明所说明的对象是静态的。静态成员与类相对应,它可被类的所有对象共享,定义了类之后即已存在。类中定义的共有静态变量相当于全局变量。
E.g.1
public class Count{
private int serialNumber;
private static int counter = 0;
public Count (){
counter++; SerialNumber =counter;
}
}
在该例子中,类Count中定义了私有成员serialNumber,它表示的是每个类对象的序列号,这个号码应该是唯一的,因此用一个静态变量counter负责计数。Count类的所有对象共享counter的值。