浙大mooc翁恺-面向对象程序设计——java语言-第1周 类与对象

第1周 类与对象

1.1 用类制造对象

  • 已经能够使用系统提供的类,比如String,来创建对象和使用对象。

  • 对象变量和普通变量的不同,对象变量是对象的管理者而非所有者,所以涉及到赋值、函数参数传递和比较都与普通变量有所不同。

  • 现在,尝试自己定义类,然后用自己定义的类来创建对象。

  • 类定义了对象长什么样,对象则是按照类的定义所制造出来的实体,一个类可以创建很多对象,每个对象有自己的数据。

对象与类

  • 对象是实体,需要被创建,可以为我们做事情

  • 类是规范,根据类的定义来创建对象

  • 对象(这只猫)

    • 表达东西或事件
    • 运行时响应消息(提供服务)
  • 类(猫)

    • 定义所有猫的属性
    • 就是Java中的类型
    • 可以用来定义变量
graph TD
    A(类) -->|定义了| B(对象)
    B --->  |是...的实体 | A

对象=属性+服务

  • 数据:属性或形态(例如画圆时的圆心和半径)

  • 操作:函数

  • 把数据和对数据的操作放在一起(鸭蛋形态),数据不对外公开, 由操作去保护数据–>封装

OOP特性

  • 一切都是对象
  • 程序就是一堆互相发送消息的对象
  • 每个对象有自己的存储空间,里面是其他的对象
  • 每个对象都有一个类型
  • 所有属于某个特定类型的对象可以提供相同的服务

1.2 定义类

  • 一个类由两种东西组成:表示对象有什么的成员变量 和 表示对象能做什么的成员函数

  • 一旦定义了类,我们就可以创建这个类的多个对象,这些对象都会做那个类所定义的动作(函数),但是各自具有不同的数据。

VendMachine

成员变量 成员函数() VendingMachine +price +balance +total +showPrompt() +insertMoney() +showBalance() +getFood()
package vendingmachine;
public class VendingMachine {
	int price =80;
	int balance;
	int total;
	void showPrompt()
	{
		System.out.println("Welcome");
	}
	void insertMorney(int amount)
	{
		balance = balance +amount;
	}
	void showBalance()
	{
		System.out.println(balance);
	}
	void getFood()
	{
		if (balance >= price)
		{
			System.out.println("Here you are");
			balance = balance -price;
			total=total +price;
		}
	}
	//设计了这样的类,三个属性四个动作;
	public static void main(String[] args) {
		VendingMachine vm= new VendingMachine();//创建对象
		vm.showPrompt();//让对象做事,.运算符
		vm.showBalance();
		vm.insertMoney(100);
		vm.getFood();
		vm.showBalance();
	}
}

创建对象

new VendingMachine();
VendingMachine vm= new VendingMachine();
  • 对象变量是对象的管理者

让对象做事

  • .运算符
  • vm.insertMoney();
  • v,.getFood();

1.3 成员变量和成员函数

  • 类才具有成员,包括”成员变量“和**“成员函数”**
  • 理解对象中的成员变量是怎么来的,怎么就能让成员函数明白自己在和哪个对象打交道;
  • 写在类里的成员变量只是一个声明,变量并不在那里,变量不在类里,变量在每一个对象里;
  • 一定要正确而且充分地理解这里的关系

成员变量

  • 类定义了对象中所具有的变量,这些变量称作成员变量;
  • 写在类里的变量,生存期是对象的生存期,作用域是类内部的成员函数
  • 每个对象都有自己的变量,和同一个类的其他对象是分开的。
  • 区别于本地变量
    • 定义在类的函数内部的变量;
    • 本地变量的作用域和生存期在函数的内部

函数与成员变量

  • 在函数中可以直接写成员变量的名字来访问成员变量
  • 那么究竟访问的是哪个对象?
    • 当通过 vm.showBalance();这样的方法调用 showBalance()函数时,建立了一个联系,它知道show的balance是vm这个变量的balance
    • 在类的成员函数与当时调用这个函数的对象之间建立联系
    • 在成员函数里,可以用this表达这一次调用这个函数的那个对象
    • this是一个VendingMachine对象的管理者
  • 函数通过对象来调用:
    • vm.insertMoney();
  • 这次调用临时建立了insertMoney()vm之间的关系,让insertMoney()内部的成员变量指的是vm的成员变量

this

  • this是成员函数特殊的(固有的)本地变量,它表达了这一次调用这个函数时的那个对象

  • 在函数内部,可以直接使用this

    • //比如说定义了一个类veningmachine
      //我想定义个函数给balance赋值,便可以用到this
      public class VendingMachine {
      	int price =80;
      	int balance;//成员变量
      	int total;
        void showBalance()
        {
          System.out.println(this.balance);
        }
      	void setBalance(int balance)
          {
              this.balance=balance;
                 //this.balance是类中的成员变量balance
                 //等号后面的balance是成员函数setBalance()中的本地变量balance
          }
      }
      

调用函数

  • 通过.运算符调用某个对象的函数

  • 在一个成员函数内部,可以直接调用自己(this)的另一个成员函数

    • void insertMoney(int amount)
      {
        balance = balance + amount;
        showBalance();//直接调用,调用时this会传进去这个函数
      }
      void showBalance...
      {
        ...
      }
      
  • 在成员函数外部,必须用.运算符

1.4 对象初始化

  • 变量初始化是程序安全很重要的一环。
  • Java提供了多种手段来保障对象创建时的初始化,包括给每个成员变量默认的“0”值、定义初始化和构造函数
  • 本课时还涉及了函数重载和用this()来调用其他构造函数的方式

成员变量定义和初始化

  • 成员变量在定义的地方就可以给出初始值
  • 未给出初始值的成员变量会自动获得0值
    • 对象变量的0值表示没有管理任何对象,也可以主动给nulI值
  • 定义初始化可以调用函数,甚至可以使用已经定义的
    成员变量

构造函数

  • 如果有一个成员函数的名字和类的名字完全相同,则在创建这个类的每一个对象的时候会自动调用这个函数–>构造函数
  • 在构造(对象)的时候会自动调用的函数叫作:构造函数。
  • 构造函数不能有返回类型
    • VendingMachine(){}没有返回类型的声明voidreturn

函数重载

  • 一个类可以有多个构造函数,只要它们的参数表不同;它们构成了重载关系(overload)
  • 创建对象的时候给出不同的参数值,就会自动调用不同的构造函数;
  • 通过this()还可以调用其它构造函数
  • 一个类里的同名但参数表不同的函数构成了重载关系
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值