关闭

Java (public ,protected,private)简单程序分析

标签: java
97人阅读 评论(0) 收藏 举报
分类:

publick可以同时修饰类和变量成员方法。如果用public修饰一个类名,如public class A{。。。}
,则表示该类可以被所有的其它类访问或引用,即其他类可以创建该类的实例,访问该类的所有可见成员变量,调用所有可见方法。
如果类成员(变量和方法)用public修饰,表示该类的成员不仅可以被其内部成员访问,而且可以被其它类直接访问,也就是说,外界可以直接存取共有数据和公有方法。
样例


class P1
{
    public int x;
    public void set_x(int i){
        x=i;
    }
    public void show_x(){
        System.out.println("x="+x);
    }
}

class Example {
    public static void main(String args[]){
        P1 Obj=new P1();
        Obj.set_x(3);
        Obj.show_x();
        Obj.x=10;
        System.out.println("x="+Obj.x);
    }

}

结果:
x=3
x=10
分析:
类P1中的所有成员都定义为public类型,因此其中的变量x和方法set_x(),和show_x()都可以被另一个类Example直接访问。

protected主要用于修饰类成员,说明该成员是被保护成员,除了可以被该类自身访问外,还可以被该类的子类及该类在同一个包中的其它类访问。
样例

class FirstClass {
    protected int n=3;
    protected void show_n(){
        System.out.println("n="+n);
    }
}
class SecondClass extends FirstClass{
    public static void main(String args[])
    {
        SecondClass abs=new SecondClass();
        abs.show_n();
        abs.n=10;
        abs.show_n();
    }
}

结果
x=3
x=10
分析:该样例演示的是在子类中访问父类中受保护的成员。SecondClass是FirstClass的子类,关键字extends表示它们之间是继承关系。由此列可以看出,子类可以直接访问父类中的被保护数据和方法。

private主要用于修饰类成员,表示该类成员只能被类自身访问,任何其它类(包括该类的子类)都无权修饰或引用。应该将不希望他人随意引用或修改的数据和方法设置为private,这将使得私有成员对其他类不可见,只有通过声明为public的方法才可以对这些私有数据进行访问,从而达到信息影藏和封装的目的。

样例

package Test;

public class Date {
    private int day,month,year;
    public void tomorrow(){
        day=day+1;
    }
    public void setDay(int d)
    {
        day=d;
    }
}
class DateUser{
    public static void main(String args[]){
        Date myDate=new Date();
//      myDate.day=21;错误
//      System.out.println("day="+myDate.day);
        myDate.setDay(21);      
    }
}

分析:类Date中3个成员变量都被定义为private类型,在本类中对它们的使用不受任何限制。但在另一个类DateUser中,访问其它类的私有成员是受限的,因此,mydate.day=21是错误的,但如果想对其中某个成员变量进行操作,可以通过类Date中的公有方法完成,如使用mydate.setDay(21)也可到达将day赋值21的目的。
提示:如果类成员前没有public,protected,private中的任何一个修饰符,则称它使用了默认(default)修饰符。这时,只有该类本身以及与该类在同一个包中的其他类才可以直接访问这些默认成员。
表格

    同一个类         同一个包          不同包中的子类          不同包中的非子类

private @
default @ @
protected @ @ @
public @ @ @ @

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:73037次
    • 积分:3143
    • 等级:
    • 排名:第11331名
    • 原创:248篇
    • 转载:0篇
    • 译文:0篇
    • 评论:14条
    最新评论