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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 倪大大 中级黑马   /  2014-5-30 16:58  /  3009 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 倪大大 于 2014-6-2 13:48 编辑

        如下
public class ry01
{
        
        public static void main(String[] args)throws Exception
        {
                        System.out.println(new anmiol(10).method(new anmiol(10)));
                        错误:System.out.println(new anmiol(100).age);//这里a不能直接调用age ,因为age是private
        }
}

        class anmiol
        {
                private int age ;
                anmiol(int age)
                {
                        this.age=age;
                        
                }
                public boolean method(anmiol a)
                {        
                        return this.age==a.age; //这里a为什么可以直接调用age
                }
        }

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

13 个回复

倒序浏览
这个问题有些基础了 建议你多动手查查
这里还是给你说一说
1.私有权限(private)

private可以修饰数据成员,构造方法,方法成员,不能修饰类(此处指外部类,不考虑内部类)。被private修饰的成员,只能在定义它们的类中使用,在其他类中不能调用。

2.默认权限(default)

类,数据成员,构造方法,方法成员,都能够使用默认权限,即不写任何关键字。默认权限即同包权限,同包权限的元素只能在定义它们的类中,以及同包的类中被调用。

3.受保护权限(protected)

protected可以修饰数据成员,构造方法,方法成员,不能修饰类(此处指外部类,不考虑内部类)。被protected修饰的成员,能在定义它们的类中,同包的类中被调用。如果有不同包的类想调用它们,那么这个类必须是定义它们的类的子类。

4.公共权限(public)

public可以修饰类,数据成员,构造方法,方法成员。被public修饰的成员,可以在任何一个类中被调用,不管同包或不同包,是权限最大的一个修饰符。
明白了没? 知道为什么了吧
回复 使用道具 举报
mathod是赋值语句,你anmiol(()里调用的是构造函数传入age值。
怎么能在.age呢并且还不加参数。
new出一个新对象不赋给一个变量就没办法在调用了。mathod是在anmiol里直接打印出来了,当然可以


你在static这部分的视频在看看,你类和方法的调用也不怎么熟练啊。
多敲代码练习两次就好了
回复 使用道具 举报
1 把私有成员变量封装在类内。就不能用通过(对象.变量)调用了,这是java封装型的表现之一。当然可以通过创建
get 方法来获取私有变量。你给你添加和修改了下代码,这样就可以比较了和访问了
  class Rey
{
         
        public static void main(String[] args)throws Exception
         {
                         System.out.println(new anmiol(10).method(new anmiol(10)));
                          System.out.println(new anmiol(100).getAge());   // 调用方法age();
         }
}

        class anmiol
         {
                 private int age ;
                 anmiol(int age)
                 {
                         this.age=age;
                        
     }
                public int getAge(){
      
      return age;
   
    }
                 public boolean method(anmiol a)
                 {        
                        return this.age==a.getAge(); // 调用方法age();
                 }
         }

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
Aron 发表于 2014-5-30 17:57
这个问题有些基础了 建议你多动手查查
这里还是给你说一说
1.私有权限(private)

大哥 我知道private不能调用 ,这个怎么可能不知道 我只是想问 为什么method方法中可以直接用对象调用私有变量
回复 使用道具 举报
丁绍然 发表于 2014-5-30 18:43
mathod是赋值语句,你anmiol(()里调用的是构造函数传入age值。
怎么能在.age呢并且还不加参数。
new出一 ...

说实话 我真没看懂你说的是什么意思. 一句都没读通
我只是想问 为什么在 method函数里 我传入的anmiol对象 可以在method里直接调用私有变量
回复 使用道具 举报
sheng6699 发表于 2014-5-30 20:20
1 把私有成员变量封装在类内。就不能用通过(对象.变量)调用了,这是java封装型的表现之一。当然可以通过创 ...

大哥 我知道能这样
我只是想问  我上面代码中  method方法中传入的anmiol对象 为什么可以直接调用私有变量 a.age
回复 使用道具 举报
问题解决:package com.itheima;
//     如下
public class ry01
{
        
        public static void main(String[] args)throws Exception
        {
                        System.out.println(new anmiol(10).method(new anmiol(10)));
                        System.out.println(new anmiol(100).age);//这里a不能直接调用age ,因为age是private
        }
}

        class anmiol
        {
                public static int age ;
                anmiol(int age)
                {
                        this.age=age;
                        
                }
                public boolean method(anmiol a)
                {        
                        return this.age==a.age; //这里a为什么可以直接调用age
                }
        }
回复 使用道具 举报
只有在本类中才可以使用私有字段,在其他类中调用是不可以的,没有为什么java这样贵点的语法:改成public 就好了
回复 使用道具 举报
因为方法中形参就相当于是对象的引用啊 就相当于在类中访问啊 当然可以啊
回复 使用道具 举报
Blackay 发表于 2014-5-31 14:46
因为方法中形参就相当于是对象的引用啊 就相当于在类中访问啊 当然可以啊 ...

看来看去 只有你的回答靠谱点 其他全是在给我普及private的基础,要疯了 没看懂问题就开始答
回复 使用道具 举报
倪大大 发表于 2014-5-31 14:40
说实话 我真没看懂你说的是什么意思. 一句都没读通
我只是想问 为什么在 method函数里 我传入的anmiol对 ...

整个程序就是这里出错的,楼主可能问为什么编译class anmiol时没提示错误,而编译System.out.println(new anmiol(10).method(new anmiol(10)));这句时提示错误。好像毕老师视频里有说过,编译类加载时,编译只会编译表达式是否符合语法规则,不会考虑其他的。
而编译到anmiol的对象时,它会先把method先运行一次,而new anmiol(10).age超出了private的调用范围,所以提示错误。

回复 使用道具 举报
倪大大 发表于 2014-5-31 15:47
看来看去 只有你的回答靠谱点 其他全是在给我普及private的基础,要疯了 没看懂问题就开始答
  ...

你传进来的那个形参就是一个对象引用 相当于拿到了对象 当然就可以访问私有变量啊
回复 使用道具 举报
fenzheng 发表于 2014-5-31 14:44
只有在本类中才可以使用私有字段,在其他类中调用是不可以的,没有为什么java这样贵点的语法:改成public 就好 ...

对啊,可以改变public
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马