zoukankan      html  css  js  c++  java
  • 类和对象

    面向对象和面向过程详解

    我们常说高级语言分为:面向过程和面向对象。

    面向过程:c

    面向对象:c++, Java

    共同点:面向过程和面向对象都是解决实际问题的一种具体思路。

    区别:

    大家描述一下如下两件事儿:

    如何开汽车(事物比较简单,可以用线性的思维去解决)

    面向过程:1.采离合2. 挂档3.踩油门,放离合4.开了

    面向对象:

    驾驶员

    2.  汽车

    驾驶员开汽车!Motor.start();

    如何造汽车(事物比较复杂,使用简单的线性思维无法解决)

    面向过程:1. 造车轮 2. 造发动机 3. 造车皮4. 挡风玻璃

    面向对象:

    车轮

    买橡胶

    到马来西亚

    买飞机票

    找到橡胶厂

    掏钱买

    用船将橡胶运到国内

    造磨具

    将橡胶放入磨具

    出车轮

    发动机

    ….

    车壳

    ….

    座椅

    挡风玻璃

    ….

    将上面的造出的东东,组装,汽车造出!

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

    解决简单问题可以使用面向过程解决,解决复杂问题:宏观上使用面向对象把握,细节处理上仍然使用面向过程

    面向对象思考方式:遇到复杂问题,先从问题中找到名词,然后确立这些名词哪些可以作为类,再根据问题需求确定类的属性和方法,确定类之间的关系

    一 对象和类的概念

    java中有一句名言,万事万物皆对象,对象指的是一个具体的事物

    比如一个叫小明的人就是一个对象,而类是对对象的抽象

    人类就是一个类,小明就是人类的一个实例也就是对象,人类中可能有其他人也就是其他实例,小李,小孙等等

    把车作一个类的话,对象就是 我家的别克车,对象也可以是你家的玛莎拉蒂车,对象就是具体的事物,而类就是对象的集合,所有对象的统称

    类可以看做是一个模版,或者图纸,系统根据类的定义来造出对象

     比如车类,模板就是有四个轮子,发动机,座位,可以跑

    车类的一个对象可以是你家的车,就有四个轮子,发动机,也能跑,也能带着你跑,车是你家的车,是一个实在的例子

    类的定义

    在java中类的定义方式是  class 类名

    1 class Car{
    2     
    3 }

    比如这个Car类

    上面的Car类一片空白,可以定义属性,有轮子,发动机,座位 可以定义跑的方法

    class Car{
          String name;
          int age;
          String color;
          String zuowei; 
        void run(){
          System.out.println("我是汽车我能跑,还能带人跑");
        }  }

    上面定义了属性,有车的名字,车龄,颜色,座位,还有个跑的方法

    创建了类了,就该创建对象了,通过车类得到你家的车

    类名 对象名 = new 类名()

    class Car{
          String name;
          int age;
          String color;
          String zuowei; 
        void run(){
          System.out.println("我是汽车我能跑,还能带人跑");
        }
         public static void main(String[] args){
              Car car = new Car();
              car.name="极品宝马"
              car.age=3;
              car.color="黑色";
              car.zuowei="真皮";
              car.run();
           }   
    }        

    你家的车改名叫极品宝马,已经3年的历史了,黑色,被你改装成了真皮沙发,还在跑

    一般类中除了属性和方法还包含构造器,也就是构造函数,可以在创建对象的时候直接给属性赋值,相当于,直接给对象做个自我介绍

    class Car{
          String name;
          int age;
          String color;
          String zuowei; 
          public Car(String name,int age,String color,String zuowei){
                this.name=name;
                this.age=age;
                this.color=color;
                this.zuowei=zuowei;
          }  
        void run(){
          System.out.println("我是汽车我能跑,还能带人跑");
        }
         public static void main(String[] args){
              Car car = new Car("极品宝马",3,"黑色","真皮");
                       car.run();
           }   
    }        

    这和上面的效果是一样的,如果在定义类的时候不创建构造器,系统会默认定义一个无参构造器

    类中的属性:[修饰符]  属性类型  属性名 = [默认值] 

    可以直接赋初始值,也可以不赋值,系统会默认初始值

    属性可以是基本数据类型,也可以是引用数据类型 

    类中的方法:定义该类的功能,比如吃饭,睡觉,打架这些动态的行为,可以这么理解,属性是名词,方法是动词,方法展现的是该类能干什么事,有什么行为

    方法定义格式:

    [修饰符]  方法返回值类型  方法名(形参列表) {

    // n条语句

    }

    在类中定义的变量成为成员变量,在方法定义在定义的变量称为方法变量,两者之间的区别是什么呢?

    (1)在类中的位置不同

          成员变量在类中方法外

          局部变量:方法定义中,或者方法声明上

    (2)在内存的位置不同

          成员变量:在堆中

          局部变量:在栈中

    (3)声明周期不同

          成员变量:随着对象的创建而存在,随着对象的消失而消失

          局部变量:随着方法的调用而存在,随着方法的调用完毕而消失

    (4)初始化值不同

          成员变量:有默认值

          局部变量:没有默认值,必须定义,赋值,然后才能使用  

    类和对象实例:

    定义一个“点”(Point)类用来表示三维空间中的点(有三个坐标)。要求如下:

    可以生成具有特定坐标的点对象。

    提供可以设置三个坐标的方法。

    提供可以计算该“点”距另外点距离的方法。

    class Point {
        double x, y, z;
        
        public Point(double _x, double _y, double _z) {
            x = _x;
            y = _y;
            z = _z;
        }
        
        public double  getDistance(Point p) {//传参数,参数就是Point的一个对象
          //计算两点之间的距离
    return Math.sqrt((x - p.x)*(x - p.x) + (y - p.y)*(y - p.y) + (z - p.z)*(z - p.z)); } } class Test { public static void main(String[] args) { Point p = new Point(5.0, 6.0, 7.8); Point origin = new Point(0.0, 0.0, 0.0);
         //通过调用方法得到距离 System.
    out.println(p.getDistance(origin)); } }

    结果

     上面的例子中有一个 public double getDistance(Point p)方法,没错 它的类型是Point类 也就是我创建的类,它需要传递的是一个Point对象

    如果你看到一个方法需要的参数是一个类名,就应该知道这里实际需要的是一个具体的对象。
    该方法还可以传递一个匿名对象,所谓匿名对象就是没有名字的对象,
    比如getDistance(new Point(1,2,3));这样也可以调用该方法

    匿名对象

    (1)没有名字的对象
    (2)应用场景
    A:调用方法,仅仅只调用一次的时候。
    b:可以作为实际参数传递。



  • 相关阅读:
    记一次 产品提的需求 (声音、振动)
    vue.config.js publicPath "./" npm run build无效的原因
    js 去掉字符串str中,连续重复的地方
    微信小程序map地图画圆圈效果
    2019年计划
    centos 7 nginx 远程无法访问的原因
    Eclipse配置关联Tomcat并运行项目
    .net连接mysql
    python xml.dom模块解析xml
    气象城市ID列表
  • 原文地址:https://www.cnblogs.com/jiawenxu/p/6715032.html
Copyright © 2011-2022 走看看