黑马程序员技术交流社区

标题: 如何学习和理解面向对象 [打印本页]

作者: sk120110    时间: 2014-7-4 12:55
标题: 如何学习和理解面向对象
如何学习和理解面向对象呢?面向对象不好学,那怎么才能正确学习面向对象呢?大家都是怎么学习的?
作者: 玉遥    时间: 2014-7-4 17:05
怎么着才能让我们更符合面向对象的思想?
a:找类
b:类有什么
c:类与类的关系

作者: 玉遥    时间: 2014-7-4 17:09
这是我学习面向对象第一天的总结,我又做了下解释希望会对你有所帮助
1:面向对象(理解)
        (1)是相对应面向过程而言的,基于面向过程的一种编程思想。
        (2)思想特点:
                A:更符合我们思考习惯的思想。
                B:把复杂的简单化。
                C:把我们从执行者变成了指挥者。(角色转换)
        (3)举例:
                A:买电脑//自已买,得看品牌,找特点,跑路找门店,是面向过程,交给对象去办,就是面向对象
                B:吃饭//自已买菜做饭乘饭,是面向过程,交给老婆去做饭端上来吃,是面向对象,老婆是对象
                C:洗衣//自己脱了洗,搓,晾,是面向过程,交给老婆去做是面向对象
                ...
        (4)把大象装进冰箱的案例分别使用面向过程和面向对象体现
                A:面向过程//这一个类自己干了这些事情
                        class Demo {
                                public static void main(String[] args) {
                                        open();
                                        in();
                                        close();
                                }

                                public static void open() {
                                        System.out.println("开门");
                                }

                                public static void in() {
                                        System.out.println("进去");
                                }

                                public static void close() {
                                        System.out.println("关门");
                                }
                        }

                B:面向对象
                       
                        class 大象 {
                                public void in() {
                                        System.out.println("进去");
                                }
                        }

                        class 冰箱 {
                                public void open() {
                                        System.out.println("开门");
                                }

                                public void close() {
                                        System.out.println("关门");
                                }
                        }

                        class 测试类 {//把测试类看成指挥者,通过另外两个类创建的对象去做事情就是面向对象
                                public static void main(String[] args) {
                                        冰箱 b = new 冰箱();
                                        大象 d = new 大象();

                                        b.open();
                                        d.in();
                                        b.close();
                                }
                        }

2:类与对象的关系(理解)
        (1)编程语言都是为了把现实世界的事物给描述出来的。
        (2)现实世界的事物体现:
                特征:外在的描述
                行为:内在的行为
        (3)Java语言的最基本单位:类
                类和事物的转换:
                        事物:
                                特征:外在的描述
                                行为:内在的行为
                        类:
                                成员变量
                                成员方法
        (4)类:是一组相关的属性和行为的抽象。
        (5)对象:是该类事物的具体存在的个体。也叫做实例。
                举例:
                        类:学生
                        对象:班长

3:如何写一个类和使用一个类的成员(掌握)
        (1)先把要描述的事物通过特征和行为体现。
           然后把该行为和特征体现为类的成员变量和成员方法。
        (2)类:
                成员变量:在类中方法外的变量。
                成员方法:就是没有static的函数。
        (3)案例:
                学生类
                手机类
        (4)使用一个类:
                A:在一个java文件中,可以写多个类。
                  但是,要求文件名和带main方法的那个类名相同。
                B:如何使用:
                        创建对象:类名 变量名 = new 类名();
                                  这个变量名其实就是一个对象。
                        使用成员:
                                成员变量:对象名.变量名;
                                成员方法:对象名.方法名();
        (5)测试案例:
                学生测试类
                手机测试类

4:匿名对象(理解)
        (1)没有名字的对象。
        (2)应用场景:
                A:(掌握) 调用方法只有一次的时候。
                B:可以作为实际参数传递。
       
5:成员变量和局部变量的区别?(掌握)
        (1)在类中的位置不同
                成员变量:在类中,方法外。
                局部变量:在方法内或者方法的形式参数。
        (2)在内存中的位置不同
                成员变量:在堆内存
                局部变量:在栈内存
        (3)生命周期不同
                成员变量:随着对象的创建而存在,随着对象的消失而消失。
                局部变量:随着方法的调用而存在,随着方法的调用完毕而消失。
        (4)初始化值的不同
                成员变量:有默认初始化值。
                局部变量:没有默认初始化值。

6:一个变量到底该不该定义为成员变量。(掌握)
        (1)如果变量和类有关系,就应该定义为成员变量。
        (2)案例:
                //变量和类没有关系
                class Demo {
                        public int compare(int a,int b){
                                return a==b;
                        }
                }

                //变量和类有关系
                class ChangFangXing {
                        int chang;
                        int kuan;

                        public int zhouChang() {
                                return 2*(chang+kuan);
                        }

                        public int area() {
                                return chang*kuan;
                        }
                }

7:封装(理解)
        (1)隐藏实现细节,提供公共的访问方式。
        (2)封装的体现:
                private修饰成员变量。
                类或者方法本身也是封装。
        (3)写代码的标准做法:(掌握)
                成员变量用private修饰。
                提供对应的getXxx()/setXxx()方法。

8:this关键字(掌握)
        (1)代表当前类的引用对象。谁调用它代码代表谁。
        (2)应用场景:
                解决局部变量隐藏成员变量值的问题。
        (3)标准代码:
                class Student {
                        private String name;
                        private int age;

                        public void setName(String name) {
                                this.name = name;
                        }

                        public String getName() {
                                return name;
                        }

                        public void setAge(int age){
                                this.age = age;
                        }

                        public int getAge() {
                                return age;
                        }
                }

                //测试类
                class StudentDemo {
                        public static void main(String[] args) {
                                Student s = new Student();

                                s.setName("林青霞");
                                s.setAge(27);

                                System.out.println(s.getName()+"---"+s.getAge());
                        }
                }




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