Title

面向对象

面向对象

面向过程思想

  1. 步骤清晰简单,第一步做什么,第二步做什么....
  2. 面对过程适合处理一些较为简单的问题

面向对象思想

  1. 物以类聚,分类的思维模式,思考问题首先会解决问题需要哪些分类,然后对这些分类进行单独思考。最后,才对某个分类下的细节进行面向过程的思索。
  2. 面向对象适合处理复杂的问题,适合处理需要多人协作的问题!

对于描述复杂的事物,为了从宏观上把握、从整体上合理分析,我们需要使用面向对象的思路来分析整个系统。但是,具体到微观操作,仍然需要面向过程的思路去处理。

什么是面向对象

  1. 面向对象编程(Object-Oriented Programming,00P)

  2. 面向对象编程的本质就是:以类的方式组织代码,以对象的方式组织(封装)数据。

  3. 抽象

  4. 三大特性:

    封装、继承、多态

  5. 从认识论角度考虑是先有对象后有类。对象,是具体的事物类,是抽象的,是对对象的抽象

  6. 从代码运行角度考虑是先有类后有对象。类是对象的模板。

===========================================================================

回顾方法与加深

  1. 方法的定义

    ◆修饰符

    ◆返回类型

    ◆break: 跳出switch,结束循环和return的区别

    ◆方法名:注意规范,见名知意

    ◆参数列表: (参数类型, 参数名) ..

    ◆异常抛出:疑问, 后面讲解

  2. 方法的调用:递归

    ◆静态方法

    ◆非静态方法

    ◆形参和实参

    ◆值传递和引用传递

    ◆this关键字

===========================================================================

静态与非静态方法的代码演示

//Student类中的方法非静态时:
package com.tea.oop;

public class Student {
    //非静态方法(因为没有加static)
    public void say(){
        System.out.println("学生说话了");
    }
}

/*************************************************************************/
 //在Demo02的主方法中调用如下:
package com.tea.oop;

public class Demo02 {
    public static void main(String[] args) {
        Student student = new Student();
        student.say();
    }
}

===========================================================================

//Student类中的方法是静态时:
package com.tea.oop;

public class Student {
    //非静态方法(因为没有加static)
    public static void say(){
        System.out.println("学生说话了");
    }
}

/*************************************************************************/
 //在Demo02的主方法中调用如下:
package com.tea.oop;

public class Demo02 {
    public static void main(String[] args) {
        Student.say();
    }
}

总结:当方法为非静态方法时,需要new一个具体对象,静态方法则可以直接调用。

===========================================================================

为什么静态方法不可以调用非静态方法(普通方法)?

    //static是和类一起加载的
    public static void a(){
        b();
    }

    //类实例化之后才存在
    public void b(){}

实际上,这段代码放在程序里是无法正常运行的,b();会标红报错,因为b()方法是类实例化之后才能存在和调用,如需调用,需要满足两个方法的类型相同(同为静态或同为非静态)

===========================================================================

形参与实参的代码演示

package com.tea.oop;

public class Demo03 {
    public static void main(String[] args) {
//      下面两行又可以写成:new Demo03().add(1,2);
        Demo03 demo03 = new Demo03();
        demo03.add(1,2);
        System.out.println(demo03.add(1,2));
    }
    public int add(int a,int b){
        return a+b;
    }
}

如果add()方法改为静态方法,则可直接调用类中的方法,而不用new一个对象,代码如下:

package com.tea.oop;

public class Demo03 {
    public static void main(String[] args) {
        int add = Demo03.add(1,2);
        System.out.println(add);
    }
    public static int add(int a,int b){
        return a+b;
    }
}

===========================================================================

值传递和引用传递的代码演示


值传递

package com.tea.oop;

//值传递
public class Demo04 {
    public static void main(String[] args) {
        int a = 1;
        System.out.println(a);
        Demo04.change(a);
        System.out.println(a); //1
    }

    //返回值为空
    public static void change(int a){
        a=10;
    }
}

引用传递

package com.tea.oop;

//引用传递:对象,本质还是值传递
//之所以你看不懂这段代码,只是因为你对内存和对象没有理解到位

public class Demo05 {
    public static void main(String[] args) {
        Person person = new Person();
        System.out.println(person.name); //null
        Demo05.change(person);
        System.out.println(person.name);    //茶茶
    }

    public static void change(Person person){
        //person是一个对象:指向的--->Person person = new Person();这是一个具体的人,可以改变属性
        person.name = "茶茶";
    }
}

//定义一个Person类,有一个属性:name
class Person{
    String name; //默认为null
}

我刚认识的时候也是模糊的,但是为了用它,我大致总结了一下步骤,个人见解:

  1. 定义一个Person抽象类,它包含name属性,name默认值为null

  2. 在主方法中new 一个Person的具体对象person,而person.name的值在没有被传入接下来的change方法之前,它的值从抽象类中传进来,默认也为null

  3. 既然person是一个具体的对象,此时我们就可以将它传入方法中,此时person.name最终指向”茶茶“,它本质还是在修改Person类中的name

    tip:要注意区分值传递和引用传递!!!

===========================================================================

posted @ 2022-09-30 21:19  花里胡哨的渣渣  阅读(5)  评论(0)    收藏  举报