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:可以作为实际参数传递。



  • 相关阅读:
    Java实现 LeetCode 394 字符串解码
    Java实现 LeetCode 394 字符串解码
    Java实现 LeetCode 392 判断子序列
    Java实现 LeetCode 392 判断子序列
    Java实现 LeetCode 392 判断子序列
    Java实现 LeetCode 391 完美矩形
    Java实现 LeetCode 391 完美矩形
    Java实现 LeetCode 391 完美矩形
    Java实现 LeetCode 390 消除游戏
    Java实现 LeetCode 390 消除游戏
  • 原文地址:https://www.cnblogs.com/jiawenxu/p/6715032.html
Copyright © 2011-2022 走看看