首页 > 其他分享 >面向对象

面向对象

时间:2022-09-30 21:35:25浏览次数:38  
标签:静态方法 person void Person 面向对象 static public

面向对象

面向过程思想

  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:要注意区分值传递和引用传递!!!

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

标签:静态方法,person,void,Person,面向对象,static,public
From: https://www.cnblogs.com/bobocha/p/16746295.html

相关文章

  • 面向对象
    创建对象内存分析简单小结类与对象......
  • 实验一面向对象
      #include<iostream>usingnamespacestd;classpoint{public:point(intx0=0,inty0=0);point(constpoint&p);~point()=default;intget_x()con......
  • 面向对象编程
    面向过程&面向对象面向过程思想步骤清晰简单,第一步做什么,第二步做什么......面对过程适合处理一些较为简单的问题面向对象思想物以类聚,分类的思维模式,思考问题......
  • Python面向对象
    1.面向对象2.什么是类和类变量?3.实例和实例化以及实例变量4.数据成员5.方法和静态方法以及类方法6.什么是方法重写7.__init__8.self9.类的初始化:new()和i......
  • Python面向对象---类的基本使用
    1、面向对象类(class):是一种用来描述具有相同属性和方法的对象的集合。类变量:类变量在整个实例化的对象中是公用的。一般定义在类中且在函数体之外。方法:类中的函数数据成员:类......
  • 使用C++语言特性中支持面向对象的语法,实现一个Point类来描述点的基础属性和操作。
    1#include<iostream>2usingnamespacestd;3classPoint{4public:5Point(intx0=1,inty0=2);6Point(constPoint&p);7......
  • JS中面向对象编程(OOP)的基本原理——this关键字、原型链、构造函数、继承
    面向对象编程(ObjectOrientedProgramming),是软件开发过程的主要方法之一。在OOP中,使用对象和类组织代码来描述事物及其功能。虽然点符号是访问对象属性的有效方法(如myobj.......
  • 购物车系统的面向对象设计(Version1.0)
    0.人员分工共同工作:进行前期调查以及框架设计的考量,对自己所设计的类进行编码规范检查,完成博客的书写李蓉完成购物车系统中商品管理功能类设计和用户登陆功能的实现......
  • python-面向对象属性的访问与self的理解
    属性访问类属性与对象属性在类中定义的名字,都是类的属性,细说的话,类有两种属性:数据属性和函数属性,可以通过__dict__访问属性的值,比如Person1.__dict__['student'],但Python......
  • 购物车程序的面向对象设计
    ​1.人员分工类1、类2、类3、类4,罗晨珊2.前期调查先在商城(Mall)中,浏览所有商品或查找某一商品,然后将商品加入购物车(Cart)中,可以在购物车内进行商品数量的增加、减少、清......