您的位置:首页 > 编程语言 > Java开发

Java学习日记之类和对象的属性

2015-05-28 20:58 441 查看
在面向对象的程序设计中,我们需要一定程度的封装性以实现信息的隐藏。类的可访问性,是指当前类可被其他类的所访问的程度。这种形式的修饰符有两个,通过不同的可访问性修饰符可以体现程序的封装性。
类的可访问修饰符只能使用:
·public
·默认访问控制属性
这两种也适用于构造方法的修饰。
public修饰的类可被其他任意类所访问,而默认访问控制属性就是无修饰符,只能被当前包中的类所访问。也就是public修饰的类可展示给所有的类使用,而默认访问控制属性修饰的类只能展示给当前包中的类使用。
**public**
关键之public修饰的类具有最大的可被访问性,凡是用public修饰的类都可以被其他任何类所访问,无论是其他类实在当前包中还是别的地方,所以,public具有最好的公开性。
但是在使用public修饰符的时候,必须保证一个包中,也就是一个.java程序中,只能有一个public类,这个类作为整个.java文件对外的接口,实现文件内的封装。
示例1:


//首先生成一个包文件,其中包含一个类
package myPage;

public class Mypackage {
public void sum(int i,int j)
{
System.out.println(i+j);
}

}


编译通过,生成包myPage.里面保存Mypackage文件,然后创建新的应用程序,不在当前包中,看能不能使用包中的类创建对象。


package classTest;
import myPage.Mypackage;
public class PublicTest {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Mypackage mp = new Mypackage();
mp.sum(2, 3);
}

}


编译后,程序运行成功,可知该程序可调用当前包中的文件。
public修饰的类具有最好的可被访问属性,所以无论PublicTest类在什么地方,都可以使用Mypackage类。
需要注意的是,在调用该类的时候需要首先导入该类,才能使用(使用import语句定位并导入)。
**默认访问**
默认访问属性说明该类只能被同一个包中的类所访问,包外的类无法生成该类的对象。这样,就是类有了封装性能。
示例2:


//如果把示例1中的类Mypackage改为如下:
package myPage;

class Mypackage {
public void sum(int i,int j)
{
System.out.println(i+j);
}

}


在PublicTest类中的编译时无法通过的,会提示:“The type myPage.Mypackage is not visible”。因为Mypackage不是公共的,不能访问。
修改方法:一种是放在同一个包中,另一种就是在Mypackage类前面添加public关键字。
**成员的可访问性**
与类的可访问修饰符想死,类中的成员也有可访问性修饰符,这些修饰符说明了成员能否在其他类中使用。
类中成员的修饰符有4种:private、默认、protected、public。他们的限定强度依次减弱。
1.public
示例3:


public class test{
public static void main(String [] args){
myClass mc = new myClass();
System.out.println(mc.i);
mc.out();
}
}
class myClass
{
public int i =4;
public void out()
{
System.out.println("four");
}
}


程序顺利编译运行。
2.protected
被protected修饰的成员变量或者方法可以被同一个类、同一个包中的不同类以及不同包中的子类所访问。与public不同的是,protected修饰的成员不能被不同的包中的非子类访问,也就是说protected可以隐藏一部分信息,使之不可见不可用。
示例4:


//将示例3中的类改为如下:
class myClass
{
protected int i =4;
protected void out()
{
System.out.println("four");
}
}


程序编译运行正常。
示例5:


//将示例1中的Mypackage改为如下:
class myClass
{
protected int i =4;
protected void out()
{
System.out.println("four");
}
}


编译不能通过,提示:“The method sum(int, int) from the type Mypackage is not visible”。
原因就在于protected修饰的方法只可以被同一包中的类或者不同包中的子类访问。
3.默认
如果成员没有属性控制符,就是默认访问控制属性。默认访问控制属性的可访问性更加严格,只能被当前类或者同一个包中的其他类访问。
示例6:


//将示例1中的Mypackage类改为如下:
package myPage;

public class Mypackage {
void sum(int i,int j)
{
System.out.println(i+j);
}
}


编译提示:The method sum(int, int) from the type Mypackage is not visible。
程序中,sum()为默认属性,不能被其他包中的类访问和使用,变量mc.sum()无法找到,所以导致程序出现错误。
4.private
private修饰的成员只能在同一个类中被访问,在任何其他类中都不能被访问,这就保证了private具有最好的封装性能。
示例7:


public class example{
public static void main(String [] args){
test myTest = new test();
myTest.show();
myTest.out();//无法调用
}
}
class test
{
private void out()
{
System.out.println("private void out");
}
void show()
{
System.out.println("void show()");
}
}


编译提示:“The method out() from the type test is not visible”。
因为out()为private类型,所以不能被其他类访问。


https://shop145619674.taobao.com/?spm=a313o.7775905.1998679131.d0011.inZI48女性点击,有女朋友的男性也可以点哦,单身男性尽量不要点。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息