A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 湛添友 中级黑马   /  2014-3-26 08:14  /  942 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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与不加有没有区别?

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 神马都是浮云

查看全部评分

8 个回复

倒序浏览
有 不加public修饰默认是default,访问权限不一样。      
                包外         子类          包内        类内
public        yes           yes            yes         yes
protected   no           yes            yes         yes
default       no            no            yes         yes
private       no            no            no          yes
回复 使用道具 举报
public 只是一个权限修饰符,在继承里面用到的 还是蛮多的,但是就你这题说的话,不是你不加,前面就没有的,他有一种默认的权限,被隐式了 default ,如果不加的话计算机会自动给你加上的,就是这样的吧
回复 使用道具 举报
加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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
菠萝鱼 发表于 2014-3-26 09:16
有 不加public修饰默认是default,访问权限不一样。      
                包外         子类          包 ...

defult权限修饰符修饰的方法可以被子类访问,都能被包中的类访问的怎么不能被子类访问,
回复 使用道具 举报
修饰符的作用,楼上的都介绍清楚了,另外如果是在同一个文件中,写的2个类,就只能有一个类是你的主类,第二个类就不能在加public等修饰符了
回复 使用道具 举报
不在同一个包内的子类
回复 使用道具 举报
湛添友 来自手机 中级黑马 2014-3-26 10:10:03
8#
菠萝鱼 发表于 2014-3-26 09:16
有 不加public修饰默认是default,访问权限不一样。      
                包外         子类          包 ...

thank so much!
回复 使用道具 举报
muma 中级黑马 2014-3-26 23:10:30
9#
public 只是一个权限修饰符,在继承里面用到的 还是蛮多的,但是就你这题说的话,不是你不加,前面就没有的,他有一种默认的权限,被隐式了 default ,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马