四、类与对象基础

本章总结

面向对象编程步骤

1). 根据题目要求定义类

2). 根据题目要求定义类中的成员属性, 构造方法,成员方法

3).创建测试类,在测试类的main方法中,使用类创建对象

4).通过对象设置对象属性,通过对象调用对象方法完成特定功能

一、 对象的概念

我们可以这么说:万事万物皆对象。

对象 :我们所面的可以描述其具体形的事物称为对象。对象可以简单理解为看得见摸得着的事物。

我们一般从两个方面来描述一个对象:属性(特征),方法(行为)。

属性 :用于描述对象具有的特征

方法 :用于描述对象具有的行为或功能
 

例如:描述一个电视机对象

属性: 用于描述对象具有的特征

          电视机: 属性(颜色,品牌,价格) 属性值(黑色,小米,2000)

          颜色: 黑色

          品牌: 小米

          价格: 2000

     方法: 用于描述对象具有的功能

          电视机:方法/功能(播放电视剧,看电影)

          播放电视剧()

开机()

关机()

描述我用的笔记本电脑对象:

同样的笔记本对象具有相同的属性和方法,但是属性值是不一样的,可以区分不同的对象。

笔记本的属性:

牌子: thinkpad 480 / 小米

颜色: 黑色 / 白色

重量: 2kg / 1.5kg

cpu: i5 / i7

内存: 16G / 16G

硬盘: 128固态+512机械 /512固态

笔记本的方法:

开机()

关机()

写代码()

授课()

描述你的好朋友: 张三,李四,宿舍房间,床,水杯

1.1 什么是面向对象编程

        面向对象程序设计(英语:Object-oriented programming,缩写:OOP)是种具有对象概念的程序编程典范,同时也是一种程序开发的抽象方针。它可能包含数据、属性、代码与方法。对象则指的是类的实例。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性,对象里的程序可以访问及经常修改对象相关连的数据。在面向对象程序编程里,计算机程序会被设计成彼此相关的对象

1.2 面向过程和面向对象编程

        但是在面向对象设计之前,广泛采用的是面向过程,面向过程只是针对于自己来解决问题面向过程的操作是以程序的基本功能实现为主,实现之后就完成了,也不考虑修改的可能性,面向对象,更多的是要进行子模块化的设计,每一个模块都需要单独存在,并且可以被重复利用,增强可维护性,所以,面向对象的开发更像是一个具备标准的开发模式

举例:

面向过程:针对开发中程序遇到的每一个问题,进行单个的编码解决。

自己做饭,买菜,洗菜,炒菜,自己吃

面向对象:只对结果,不管实现的细节。

到饭馆叫饭,自己吃

学习面向对象其实就是学习如何在代码中使用 封装,继承,多态。

在面向对象定义之中,也规定了一些基本的特征:

(1)封装:保护内部的操作不被破坏; 安全性

(2)继承:在原本的基础之上继续进行扩充; 复用性

(3)多态:在一个指定的范围之内进行概念的转换。可扩展性

对于面向对象的开发来讲也分为三个过程:

OOA(面向对象分析)、OOD(面向对象设计)、OOP(面向对象编程)。

总结面向对象最终的目的是在保证功能实现的基础上,方便后期程序的维护。

二、 类的概念

2.1 什么是类

具有相同属性和行为的对象,可以被归为一

令狐冲:

属性:姓名(令狐冲),性别(男),年龄(28),  

方法:会武功(耍剑)


东方不败:

属性:姓名(东方不败),性别(女),年龄(18)

方法:会武功(绣花)


令狐冲和东方不败都具有相同的属性和方法,因此他们可以归为【人类】。


由此:

宝马,奔驰,法拉利也具有相同的属性和行为所以可以归为【车类】。

:将具有相同属性和方法的对象进行抽象,这就是类。

它一般包括了属性和方法两大部分。可以理解为类是对象的设计图纸(房屋设计图,手机设计图)。

        类限定了对象具有的特征属性和行为,因此可以将类看作对象的模板。通过一个类,我们可以创建任意个对象,而被创建的同一个类任意个对象,都具有相同的属性和行为。

类是对象的模板。对象是类的实例。

类是抽象的概念,对象是具体的存在。

注意:同一个类的对象,会具有相同的属性和方法,但是它们的属性值可以不一样,这样可以区分出不同的对象实体。

        面向对象编程,为什么要从定义类开始?因为在创建对象(车/房子)之前,需要先设计对象具有的属性和行为,所以要先把对象所属的(汽车图纸/房屋图纸)定义出来。通过定义好的类,来创建这个类型的对象先有月饼模子,再创建月饼出来)。

        面向对象编程的步骤:

                1.定义类型

                2.用类型创建具体的对象

                3.调用对象的属性和方法,完成程序处理

2.2 类的结构

public class 类名{


//成员属性

//构造方法

//成员方法

}

实例

public class Student {

    // 属性: 成员属性,成员变量,全局变量

    // 姓名

    String name;

    // 性别
        
    String sex;

    // 年龄

    int age;

    // 身高

    double tall;

    // 方法: 成员方法,实例方法

    public void eat(){

    // this:当前对象

    System.out.println(this.name+"吃早餐");

  }

public void study(){

    System.out.println(this.name+"学习java");

  }

}

2.3 类的使用

使用类创建对象,为对象赋值,并调用对象方法

public class Test {
    public static void main(String[] args) {
        // 使用类创建对象
        Student s1 = new Student();
        // 设置对象属性
        s1.name="张三";
        s1.sex="男";
        s1.age = 18;
        s1.tall = 1.7;
        // 调用对象方法
        s1.eat();
        s1.study();
        Student s2 = new Student();
        s2.name="李四";
        s2.sex="女";
        s2.age = 16;
        s2.tall = 1.8;
        s2.eat();
        s2.study();
    }
}

注意:类的属性本质是全局变量,是有默认值的

字符串: null 整形: 0 小数: 0.0 布尔: false

而方法内的变量是局部变量,不赋值的时候无法使用

面向对象编程的步骤:

        1.根据题目定义类: 定义属性和方法

        2.使用类

                a.创建测试类,定义main方法

                b.在main方法中,使用类创建对象: 类名 变量 = new 类名();

                c. 使用创建出来的对象,设置对象属性,访问对象属性,调用对象方法

                    完成特定功能。

三、构造方法

        构造方法:在类创建对象的时候,通过new关键字调用的方法称为构造方法。它可以用于为对象属性设置初始值。

语法:

public class 类名{
    //构造方法
    public 类名(参数列表){
      // 初始换属性
    }
}
//通过new调用构造方法,创建类的对象类名
 变量 = new 类名();

特征:

  1. 构造方法是非常特殊的方法,方法名要与类名完全一样
  2. 构造方法不能写返回值
  3. 构造方法通过new关键字调用
  4. 一个类中,可以定义构造,也可以不定义构造。当类中没有定义构造的时候,系统会提供默认无参构造,当类中定义了构造之后,系统将不再提供默认无参构造
  5. 一个类中可以定义多个构造

作用:

  1. 使用类创建对象的时候要调用构造方法
  2. 通过构造可以为对象的属性设置初始值,避免漏掉某些属性不赋值

实例:

public class Student{
  String name;
  int age;
  String sex;
  double height;
    public Student() {}
  public Student(String name,String sex,int age,double height) {
        this.name=name;
        this.age=age;
        this.sex=sex;
        this.height=height;
  }
    public Student(String name,String sex,int age) {
        this.name=name;
        this.age=age;
        this.sex=sex;
          }
}

通过构造方法创建类的对象:

Student stu=new Student("孙悟空","男",19,1.65);

构造方法小结:

- 定义构造方法:public + 类名(参数列表){初始化代码}

- 当类没有构造方法时,系统会给一个默认的空构造方法

- 当你一旦定义了自己的构造方法,系统就收回了默认的构造方法

- 如果还想用默认的构造方法,则必须自己另外定义

- 自定义的构造方法主要用于对象的初始化

四、成员方法

构造方法的作用,是为了创建对象。

成员方法是为了实现某个具体的功能: 吃早餐,打游戏,听音乐,学习

语法:

[访问修饰符] 返回值类型  方法名([参数列表]){
    方法体
    return 返回值;
}

说明:

[访问修饰符] : 中括号在语法描述上表示这个部分可以省略

  • 访问修饰符,表示定义的方法能够被访问的一个范围 。
  • 属性/方法的访问修饰符: 总共有四个级别 public,protected,默认,private
  • 返回值类型: 必须要有。取值:

        ​         void: 表示这个方法不需要返回结果

                其他任何类型(基本类型/引用类型) : 表示方法必须要有返回值,而且返回值的类型要和定义的类型一致。

  • 方法名: 自己定义,按照标识符的规则(字母,数字下划线),要按照小驼峰命名
  • 参数列表:可以省略,省略的时候表示这个方法不需要参数。如果有参数,那么在调用方法是必须要按照参数列表的定义传递参数。可以是各种类型的数据
  • 方法体: 方法实现具体功能的代码部分。
  • 返回值: 要和方法的返回值类型结合使用。

​如果返回值类型是void。那么该方法不能有返回值(要么没有reutrn,要么return后面不要写数据)。如果返回值类型不是void,是其他类型: 那么此时方法最终一定要有返回值,而且返回的数据要和返回值类型对应

//无返回值的方法
public void eat(String food) {
    System.out.println(name+"在吃"+food);
}
//带返回值的方法
public String buy(double money) {
    if(money<=1.5) {
        return "矿泉水";
//返回的具体值必须是定义的类型的值
    }else {
        return "方便面";
    }
}
// 带返回值的方法的调用
String res=stu.buy(5.5);
System.out.println(res);

定义手机类

public class Phone {
    // 品牌
    String brand;
    // 价格
    double price;
    // 有参构造
    public Phone(String brand,double price){
        this.brand=brand;
        this.price=price;
    }
    // 成员方法
    // 显示手机信息
    public void showInfo(){
       System.out.println(this.brand+" "+this.price);
    }
    // 充电
    public void chongdian(int hours){
        System.out.println("给手机充电:"+hours+"小时");
        if(hours<=1){
            System.out.println("没充满");
        }else{
            System.out.println("充满了");
        }
    }
    /**
     * 有参有返回值的方法
     * 给某人打电话
     * @param name : 给谁打电话
     * @param min  : 打了多少分钟
     * @param money: 每分钟多少钱
     * @return : 返回一共花了多少钱 
     */
    public double call(String name,int min,double money){
        System.out.println("使用价值"+this.price+"的"+this.brand+"手机,给"+name+"打了"+min+"分钟电话");
        double qian =  min*money;
        return qian;
    }
}

通过测试类,调用方法

public class Test {
    public static void main(String[] args) {
        // 创建一部手机
       Phone p1 = new Phone("小米",2999);
        // 调用手机方法
        p1.showInfo();
        // 充电
        p1.chongdian(5);
        // 手机打电话
        double q =  p1.call("周杰伦",5,10.5);
        System.out.println("打电话花了:"+q);
        Phone p2 = new Phone("华为",3999);
        p2.showInfo();
        p2.chongdian(1);
        double q2 =  p2.call("刘德华",10,11.5);
        System.out.println("打电话花了:"+q2);
        System.out.println("=================");
        System.out.println("使用两部手机打电话一共花了:"+(q+q2));
    }
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值