黑马程序员技术交流社区

标题: 面向对象问题 [打印本页]

作者: wujie    时间: 2013-4-27 23:10
标题: 面向对象问题
本帖最后由 wujie 于 2013-4-28 21:37 编辑

class Person {
       private String name="rere";
       private int age=89;


       public String getName() {
           return name;
       }
       public void setName(String name) {
            this.name = name;
      }
      public int getAge() {
           return age;
     }
      public void setAge(int age) {
          this.age = age;
     }

}

class Person1 {
       public static void main(String[] args) {
             Person p = new Person();
  
            Person p1 = new Person();
  
  
            p.setName("wiii");
  
                  System.out.println(p.getAge()+""+p.getName());
  
                  System.out.println(p1.getAge()+""+p1.getName());
     }
}这个过程我不是很明白,谁更详细和我说一下执行过程和注释·······谢谢啦!!!1

作者: 337091921    时间: 2013-4-27 23:58
class Person {
        private String name="rere";//定义了两个私有的变量
        private int age=89;


        public String getName() {//获的变量
            return name;
        }
        public void setName(String name) {//对外提供一个获的变量的函数
             this.name = name;
       }
       public int getAge() {
            return age;
      }
       public void setAge(int age) {
           this.age = age;
      }

}

class Person1 {
        public static void main(String[] args) {
              Person p = new Person();//创建一个对象
   
             Person p1 = new Person();//创建一第二个对象
   
   
             p.setName("wiii");//去上面找参数是String的函数。来调用
   
                   System.out.println(p.getAge()+""+p.getName());
   
                   System.out.println(p1.getAge()+""+p1.getName());
作者: 施祖喜    时间: 2013-4-28 00:09

  1. class Person {//创建一个person类;
  2.       private String name="rere";//对象的属性,被私有化
  3.       private int age=89;


  4.       public String getName() {//name的get函数,对访问name的函数返回一个值,也可以说是提取对象name属性的值
  5.            return name;
  6.       }
  7.       public void setName(String name) {//name 的set函数,对外提供访问一个访问的方法,可以给对象赋一个新值
  8.             this.name = name;
  9.       }
  10.       public int getAge() {
  11.            return age;
  12.       }
  13.       public void setAge(int age) {
  14.           this.age = age;
  15.       }

  16. }

  17. class Person1 {
  18.        public static void main(String[] args) {
  19.              Person p = new Person();//创建一个person对象 名字为 P
  20.   
  21.             Person p1 = new Person();//创建另一个person对象名字为P1
  22.   
  23.   
  24.             p.setName("wiii");//给p这个对象的neme赋值wiii
  25.   
  26.                   System.out.println(p.getAge()+""+p.getName());//打印p对象的属性
  27.   
  28.                   System.out.println(p1.getAge()+""+p1.getName());//打印p1对象的属性
  29.            }
  30. }
复制代码
首先,主函数加载进栈内存--创建person  p 对象,----创建person  p1 对象  -----对p对象neme赋值----打印输出p对象的  年龄,名字-----打印输出p1对象的年龄  名字。
作者: 张迁    时间: 2013-4-28 00:15
  1. class Person {
  2.         private String name="rere"; //定义类的两静态属性
  3.         private int age=89;


  4.         public String getName() {//set函数设置name属性
  5.             return name;
  6.         }
  7.         public void setName(String name) {//set函数设置age属性
  8.              this.name = name;
  9.        }
  10.        public int getAge() {  //get函数获得name属性
  11.             return age;
  12.       }
  13.        public void setAge(int age) { //get函数获得age属性
  14.            this.age = age;
  15.       }

  16. }

  17. class Person1 {
  18.         public static void main(String[] args) {
  19.               Person p = new Person();  //实例化一个 p对象
  20.    
  21.              Person p1 = new Person();  //实例化一个 p1对象
  22.    
  23.    
  24.              p.setName("wiii");  //设置p对象name属性为"wiii",
  25.    
  26.                    System.out.println(p.getAge()+""+p.getName());//输出p对象的age,name属性
  27.    
  28.                    System.out.println(p1.getAge()+""+p1.getName());//输出p1对象的age,name属性
  29.       }
复制代码

作者: 江大海    时间: 2013-4-28 01:38
手机无力,我就说说私有和this吧,我感觉你应该和我当时差不多,都比较迷茫当时,先说私有,为什么要私有?就是要吧对象的属性隐藏起来,不暴露给调用者。而构造函数的作用是给对象初始化,按我的理解就是构造函数有个作用就是让我们可以控制你传进来的变量,比如说你的age,假如用户传进来的是一万岁,那明显就是不符合常理的,所以我们就要对age进行判断,而你直接用if判断是不可以的,语法上不可以,而构造函数就给我们解决了这个问题,就像你上面的set age(){}你就可以在里面进行判断了,还有就是this.age=age;其实这个就是区分那个是成员变量,哪个是局部变量,this.的那个就是代表那个对象调用它,它就代表哪一个的age
作者: wujie    时间: 2013-4-28 08:03
江大海 发表于 2013-4-28 01:38
手机无力,我就说说私有和this吧,我感觉你应该和我当时差不多,都比较迷茫当时,先说私有,为什么要私有? ...

我主要是在对象p与p1的内存图不是很明确,帮我画一下好吗?
作者: liuelxiwd    时间: 2013-4-28 09:09
wujie 发表于 2013-4-28 08:03
我主要是在对象p与p1的内存图不是很明确,帮我画一下好吗?

p 和p1是两个引用,通俗点说就是两个箭头,虽然上下两个new Person()是一样的,但是他们是在堆中开辟了两片空间,地址不一样
作者: wujie    时间: 2013-4-28 21:43
337091921 发表于 2013-4-27 23:58
class Person {
        private String name="rere";//定义了两个私有的变量
        private int age=89; ...

谢谢啊哈
作者: wujie    时间: 2013-4-28 21:48
江大海 发表于 2013-4-28 01:38
手机无力,我就说说私有和this吧,我感觉你应该和我当时差不多,都比较迷茫当时,先说私有,为什么要私有? ...

嗯,谢谢你啊·
作者: wujie    时间: 2013-4-28 21:48
liuelxiwd 发表于 2013-4-28 09:09
p 和p1是两个引用,通俗点说就是两个箭头,虽然上下两个new Person()是一样的,但是他们是在堆中开辟了两 ...

嗯,看懂了,Thank you
作者: wujie    时间: 2013-4-28 21:51
张迁 发表于 2013-4-28 00:15

谢谢啊,呵呵




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