黑马程序员技术交流社区

标题: public的问题 [打印本页]

作者: 湛添友    时间: 2014-3-26 08:14
标题: public的问题
public class Encapsulation_1{
    public static void main(String[] args){
    person Z=new person();
    Z.setAge(25);
System.out.println(Z.getAge());
new person().setAge(23);
Z.speak();
   }

}

class person
{
private int age;
public void setAge(int a)
{
if(a>0&&a<150)
{
age=a;
}
else
System.out.println("非法年龄");
}
public int getAge()
{
return age;
}
void speak()
{
System.out.println("年龄是"+age);
}
}
问题  class person中
void speak()
{}
前面加public与不加有没有区别?
作者: 菠萝鱼    时间: 2014-3-26 09:16
有 不加public修饰默认是default,访问权限不一样。      
                包外         子类          包内        类内
public        yes           yes            yes         yes
protected   no           yes            yes         yes
default       no            no            yes         yes
private       no            no            no          yes
作者: 学习代码    时间: 2014-3-26 09:27
public 只是一个权限修饰符,在继承里面用到的 还是蛮多的,但是就你这题说的话,不是你不加,前面就没有的,他有一种默认的权限,被隐式了 default ,如果不加的话计算机会自动给你加上的,就是这样的吧
作者: yanzhendong    时间: 2014-3-26 09:30
加public 是公共访问权限,不加public是包访问权限,假如speak()前面不加public,其他包中的类就无法调用这个函数就像这样
  1. package study;

  2. public class mytest2 {

  3.         public static void main(String[] args) {
  4.                 // TODO Auto-generated method stub

  5.         }
  6.        
  7.         public void show(){
  8.                 System.out.println("public methol show");
  9.                
  10.         }
  11.         void show1(){
  12.                 System.out.println("defult methol show");
  13.         }

  14. }

  15. package my1;
  16. import study.mytest2;
  17. public class mytest1 {

  18.         public static void main(String[] args) {
  19.                 // TODO Auto-generated method stub
  20. mytest2 mytestobj=new mytest2();
  21. mytestobj.show();//调用public方法没有问题
  22. //无法调用mytestobj.show1();因为他是包访问权限,只有一个包中的类才能调用这个函数,二mytest2属于包my1不属于包study所以无法访问这个函数
  23.         }

  24. }

  25. package study;
  26. import study.mytest2;
  27. public class mytest3 {

  28.         public static void main(String[] args) {
  29.                 // TODO Auto-generated method stub
  30. mytest2 mytestobj=new mytest2();
  31. mytestobj.show();//可以调用mytest用public修饰的方法
  32. mytestobj.show1();//也可以调用无权限修饰符修饰的方法,即包访问权限方法,在其他包中这个方法是不能被访问的,就像my1包中的mytest1类就无法访问这个方法
  33.         }

  34. }
复制代码

作者: yanzhendong    时间: 2014-3-26 09:42
菠萝鱼 发表于 2014-3-26 09:16
有 不加public修饰默认是default,访问权限不一样。      
                包外         子类          包 ...

defult权限修饰符修饰的方法可以被子类访问,都能被包中的类访问的怎么不能被子类访问,
作者: 王竞    时间: 2014-3-26 09:52
修饰符的作用,楼上的都介绍清楚了,另外如果是在同一个文件中,写的2个类,就只能有一个类是你的主类,第二个类就不能在加public等修饰符了
作者: 菠萝鱼    时间: 2014-3-26 09:53
不在同一个包内的子类
作者: 湛添友    时间: 2014-3-26 10:10
菠萝鱼 发表于 2014-3-26 09:16
有 不加public修饰默认是default,访问权限不一样。      
                包外         子类          包 ...

thank so much!
作者: muma    时间: 2014-3-26 23:10
public 只是一个权限修饰符,在继承里面用到的 还是蛮多的,但是就你这题说的话,不是你不加,前面就没有的,他有一种默认的权限,被隐式了 default ,




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2