面向对象(一)之什么是对象,如何创建一个好对象

类与对象的创建,变量与方法的引用,构造方法,重载其实都很简单

面向对象

1.1 Java类及其类的成员

Java中类类的成员有五个,分别是:属性方法构造器;代码块、内部类

其中最重要的是前三个

1.2 面向对象的三大特征

封装性、继承性、多态性

一、面向对象和面向过程

1.什么是对象

对象:一切万物皆对象
对象是真实存在的事物

2.如何理解面向对象

  • 面向对象POP
    • 面向对象是指宏观上,以对象的关系来分类,面向对象先对整体关系进行分类然后通过细节实现
  • 把这问题抽象出来三个类:人类、冰箱类、大象类
    • 人有打开冰箱门、装大象、关冰箱门的功能
    • 冰箱有开启和关闭的功能
    • 大象有进入冰箱的功能
    • 三个类之间互相调用彼此的功能共同处理问题
    • 从这个例子我们可以打出两者的不同

3.如何理解面向过程

  • 面向过程OPP
    • 面向过程是细节上的过程, 分析出解决问题的所要的步骤,然后在一步一步解决出来
  • ① 打开冰箱门
    ② 把大象装进冰箱
    ③ 关闭冰箱门

4.联系

  • 面向过程:强调的是功能行为,以函数为最小单位,强调怎么做
    • 就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
  • 面向对象:强调具备了功能的对象,以类\对象为最小单位,考虑谁来做
    • 是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。

4 两者之间的关系

  • 面向过程适合处理简单的事情,直接关注流程,简单有效。
  • 面向对象适合处理复杂的事情,先使用面向对象的方式对整体关系作出分类,然后,根据不同的类深入细节的处理。
  • 面向对象无法取代面向过程,他们是相辅相成的。面向对象关注于从宏观上把握事物之间的关系,在具体到如何实现某个细节时,仍然采用面向过程的思维方式。面向对象如果离开了面向过程,就无法实现真正的落地,成为无源之水。

二、类与对象

1.什么是类

  • 类是一个模板,是对同一类事物的属性和行为的集合
    eg: 人类
  • 他们有具体的特性
    eg:人都能吃饭学习等

2.类的结构

  • 成员(变量)
    事物属性的描述
    上面说的人的年龄、性别、名字,这都是判断类中成员的属性。
    eg:
    一类青少年,那就是年龄较小的一类人
    • 成员变量的创建
[访问权限修饰符] [修饰符] String name [ = defaultValue]; 
  • 方法
    事物的行为
    eg:
    上面说的人类,他们能做什么,能吃饭,能学习

  • 发现类的方法

public [修饰符]/void start(){
  eg:System.out.println("汽车开始启动");  
return 返回值
}

3.类的定义

public 访问全系的修饰符
final/abstract 这个可有可无,属于修饰符
class 关键词用class来定义一个类
Car 类名

public class Car {

}

4.对象

  • 类是一个模板,那对象就是一个客观存在的事物
    类是广泛的;
    而对象是单独纯在的;
  • 对象的创建和使用
 Car x1 = new Car();
  • 创建对象的注释
    • Car x1 :使用Car类型的一个变量x1,也可以称为x1是对象.
    • new Car() :Car类构造方法创建对象
    • = 将右边创建对象的地址赋给左边x1变量
  • 注:
    使用x1变量访问对象中的成员变量和成员方法.
    同一类的每个对象有不同的成员变量存储空间。
    同一类的每个对象共享该类的方法。

5.总结

  • 类是一类事物的抽象概念,是一个模型.
  • 对象是由这个模型所创造的一个个具体存在的,实实在在存在的实例.
    • 所以创建对象的过程也叫实例化对象.
      • 现实生活中先有对象后有类 因为类是对对象的一种描述,统称
      • 而编程时先设计类后创建对象. 因为类是模板,所以只有创建类后,才能创建对象.

三、变量

按照位置变量分为:成员变量,局部变量

1.成员变量

  • 成员变量是定义在类中,方法体之外的变量。

  • 成员变量可以使用Java语言中任何一种数据类型(包括基本类型和引用类型)。

  • 在定义成员变量时可以对其初始化,如果不对其初始化,Java使用默认的值对其初始化。

  • 成员变量在创建对象的时候会从类中复制一份到对象中。

  • 成员变量可以被类中方法、构造方法和特定类的语句块访问。

  • 成员变量的作用范围为整个类体。

public class Car {
    String name;
    String color;
    float price;
    String b;
    
}

2.局部变量:

  • 在方法、构造方法或者语句块中定义的变量被称为局部变量。
  • 局部变量可以使用Java语言中任何一种数据类型(包括基本类型和引用类型)。
  • 局部变量在使用前必须初始化赋值。
  • 变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。

四、方法

1.成员方法:

  • 成员方法是定义在类中。
  • 这种方法在创建对象的时候创建。
  • 语法格式:
修饰符  返回值类型  方法名 ( 参数列表) {
  	   方法体语句;
       [return 返回值]
} 
public class Car {
  
    public void Begin(){
        System.out.println("汽车开始启动");
    }
    public void Stop(){
        System.out.println("汽车开始停止");
    }
    public void Stop(String n){
        System.out.println("汽车开始匀速跑");
    }
    public void Stop(int a , String n){
        System.out.println("汽车开始飞奔");
    }
 
}

2.构造方法:

  • 用来创建对象的方法
  • 构造方法名与类名相同,没有返回值,不需要void返回;
  • 构造方法写时,默认无参构造方法
  • 构造方法写时,默认无参构造方法
  • 构造方法是定义在 Java 类中的一个用来创建对象的方法。
  • 一个类可以有多个构造方法
public class Car {
    String name;
    String color;
    float price;
    String b;
    public Car(){
        System.out.println("构建一个无参构建方法");
    }
    public Car(String n){
        name = n;
        System.out.println(n);
        System.out.println("构建一个有一个参的构建方法");
    }
    public Car(String n,String c){
        name = n;
        color = c;
        System.out.println(n+c);
        System.out.println("构建一个有俩个参的构建方法");
    }

怎么说呢,我们可以在类中定义有参的构造方法,一旦定义,无参的就会失效,一个类中可以有多个构造方法,通过引用和参数来区分.

3.重载

  • 就是一个类里面,有多个名字相同的但参数不同方法,方法的重载与方法的返回值类型没有任何关系,
    如何区别方法的重载
    • 参数不同(可以有三方面的不同)
    • 数量不同
    • 类型不同
    • 顺序不同
  • 调用时,会根据不同的参数对应不同的方法。

4.对象与调用

int a = 10;
int b = a;//值传递,基本的数据直接传递给其他变量
  • java的对象是通过调用实现的
    Car x1 = new Car();
    • Car x1 使用Car类型的一个变量x1
    • 所谓Car类的引用,就是以后可以用想x1来指向Car对象的对象引用。
    • new Car() Car类构造方法创建对象
    • = 将右边创建对象的地址赋给左边x1变量

代码如下

package day1;
public class Car {
    String name;
    String color;
    float price;
    String b;
    public Car(){
        System.out.println("构建一个无参构建方法");
    }
    public Car(String n){
        name = n;
        System.out.println(n);
        System.out.println("构建一个有一个参的构建方法");
    }
    public Car(String n,String c){
        name = n;
        color = c;
        System.out.println(n+c);
        System.out.println("构建一个有俩个参的构建方法");
    }
    public void Begin(){
        System.out.println("汽车开始启动");
    }
    public void Stop(){
        System.out.println("汽车开始停止");
    }
    public void Stop(String n){
        System.out.println("汽车开始匀速跑");
    }
    public void Stop(int a , String n){
        System.out.println("汽车开始飞奔");
    }
    public void Al(String a){
        b = "a";
        System.out.println(a);
    }
    public String Xy(String a){
        b = "a";
        System.out.println(a);
        return b;
    }
}
package day1;

public class Nextcar {
    public static void main(String[] args) {
        Car bc = new Car();
        bc.name = "奔驰";
        bc.color = "蓝色";
        bc.price = 100000;
        bc.Begin();
        bc.Stop();
        System.out.println(bc.name+":"+bc.color+":"+bc.price);

        Car bm = new Car();
        bm.name = "宝马";
        bm.color = "绿色";
        bm.price = 500000;
        bm.Begin();
        bm.Stop();
        System.out.println(bm.name+":"+bm.color+":"+bm.price);
        Car dz = new Car("大众");

        Car lx = new Car("联想","白色");
        System.out.println(lx.name+lx.color);
        lx.Al("d");

        lx.Stop("");
        lx.Stop(1,"");

        lx.Xy("z");
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值