面向对象(1)

面向对象

一、面向对象简介

1.面向对象是什么

OOP: Object Oriented Programming

面向对象是一种程序的设计范型,是一种思想,使用对象的概念进行程序设计

一切皆对象,世间万物都是对象

2.两个概念
2.1类

类是具有相同特征和行为的一组对象的抽象

类是一个抽象的概念,没有具体的事务与之对应,如人类、动物

2.2对象

对象是类的实例

对象是某一个具体的事物,如这个学生、这只狗

3.产生

二、类的使用

1.定义类

语法:

class 类名
{
   属性;
   方法;
}

类:

  • 一个类就是一个数据类型,定义一个类其实就是创建了一个数据类型
  • 类名使用帕斯卡命名法,即所有单词首字母大写
  • 一个文件中可以定义多个类,但只能有一个public修饰的类,且此类的名称必须与文件名相同
  • 实际开发中都是一个类对应一个文件,不允许在一个文件中定义多个类

属性:

  • 类的特征
  • 定义方式:数据类型 属性名;
  • 属性名使用驼峰命名法,即第一个单词首字母小写,其他单词首字母大写

方法:

  • 类的行为
  • 定义方法:public 返回值类型 方法名(参数) {方法体}
  • 方法名使用驼峰命名法,且一般多使用动词
public class Car {
//属性(特征)
	String name;
	String color;
	String direction;
	int speed;
	double price;

	// 方法(行为)
	public void run() {
		System.out.println(name+"正在以"+speed+"的时速向"+direction+"行驶");
	}
}
2.创建对象

语法:

//方式1
类名 对象名=new 类名();
//方式2
类名 对象名;
对象名=new 类名();
3.访问对象

访问对象的属性:对象名.属性名

访问对象的方法:对象名.方法名();

          /*
		 * 使用面向对象记录车辆信息
		 */
		Car car1 = new Car();// 创建一个Car对象
		car1.name = "奔驰";// 为属性赋值
		car1.color = "黑";
		car1.direction = "北";
		car1.speed = 119;
		car1.price = 96.3;

		Car car2;// 创建一个Car对象的引用
		car2 = new Car();//创建Car对象,car2指向此对象
		car2.name = "北京现代";// 为属性赋值
		car2.color = "白";
		car2.direction = "西";
		car2.speed = 89;
		car2.price = 45.3;

		System.out.println(car1.name);
		System.out.println(car2.direction);

		car1.run();//调用对象的方法
		car2.run();

三、this关键字

1.全局变量和局部变量

全局变量:

  • 在类中定义的变量,称为全局变量,也就是属性
  • 在整个类中都可以使用
  • 有默认值,可以直接使用

局部变量:

  • 除全局变量以外的其他变量,称为局部变量,如在方法或代码块中定义的变量
  • 只能在局部访问
  • 没有默认值,必须先赋值才可以使用
  • 局部变量和全局变量同名,局部变量优先级更高,即默认访问的是局部变量

可以使用this关键字解决局部变量和全局变量同名的问题

2.this用法

this表示当前类的一个对象

  • 只能在类的方法中使用,表示方法的调用者,即调用该方法的对象
  • 当局部变量和全局变量同名时,可以使用this.来访问全局变量
  • 当局部变量和全局变量不同名时,可以省略不写this.
public static void main(String[] args) {
		Account account = new Account();
		//account.queryMoney();
		Account account1 = new Account();
		account1.name = "张三";
		account1.getMoney(); // 此时this代表的是account1对象
		System.out.println();
		Account account2 = new Account();
		account2.name = "李四";
		account2.getMoney();// 此时this代表的是account2对象
	}
}

/*
 * 账户类
 */
class Account {
	/*
	 * 全局变量
	 */
	String name = "tom";// 有默认值
	double money;
	// 查询余额
	public void queryMoney() {
		System.out.println("姓名:" + name + " " + "余额:" + money);
	}
	// 存钱
	public void saveMoney(double money) {// 形参也是局部变量
		this.money += money;
	}
	// 取钱
	public void getMoney() {
		int a = 5;// 局部变量
		System.out.println(a);
		// int b;
		// System.out.println(b);
		String name = "alice";// 局部变量
		System.out.println("局部变量name" +" "+ name);// 局部变量优先级更高
		System.out.println("全局变量name" + " "+this.name);
		System.out.println(money);// 当局部变量和全局变量不同名时,可以省略this.
	}

四、static关键字

static 表示静态的,可以修饰变量和方法,分别称为静态变量和静态方法

1.静态变量

使用static修饰的变量,称之为静态变量 或 类变量(非static修饰的变量称为实例变量)

静态变量为类的所有对象所共有,属于整个类

访问方式:对象名.属性名类名.属性名(推荐)

2.静态方法

使用static修饰的方法,称之为静态方法 或 类方法(非static修饰的方法称为实例方法)

访问方式:对象名.方法名类名.方法名(推荐)

静态方法中只能访问静态变量或静态方法,不能访问实例变量和实例方法

Cannot make a static reference to the non-static method

变量分类:

  • 从作用域上划分:全局变量、局部变量
  • 从变量所属上划分:实例变量、类变量
public static void main(String[] args) {
		Student stu1 = new Student();
		stu1.name = "tom";
		System.out.println(stu1.name);

		// stu1.hobby="吃饭";
		Student.hobby = "睡觉";// 推荐

		// System.out.println(stu1.hobby);

		Student stu2 = new Student();
		stu2.name = "jack";
		Student.hobby = "编程";

		System.out.println(stu2.name);
		System.out.println(stu1.hobby);

		stu1.show();

		// stu2.print();
		Student.print();// 推荐
	}
}

/*
 * 学生类
 */
class Student {
	String name;// 实例变量
	static String hobby;// 静态变量(类变量)

	// 实例方法
	public void show() {
		System.out.println("实例方法show");
		System.out.println("姓名:" + name);
		System.out.println("爱好:" + hobby);// 实例方法中可以访问静态变量
	}

	// 静态方法
	public static void print() {
		System.out.println("静态方法print");
		// System.out.println("姓名:"+name);//静态方法中不能访问实例变量
		System.out.println("爱好:" + hobby);
		// show();//静态方法中不能访问实例方法
	}

五、方法重载

一个类中包含两个或两个以上同名的方法,其参数不同,称为方法重载overload

  • 在同一个类中
  • 方法名相同
  • 参数列表不同(参数个数、类型、顺序至少有一项不同),即方法签名不同
  • 与方法修饰符、返回值类型、形参名无关

作用:提供同一种功能的多种实现方式,根据调用者传递的参数来决定采用哪一种方式

public static void main(String[] args) {
		Calculator c = new Calculator();

		// 调用时会根据传递的参数的不同调用相应的重载方法
		System.out.println(c.sum(3, 5));
		System.out.println(c.sum2(3, 5, 2));
		System.out.println(c.sum(3, 5.8));
		System.out.println(c.sum(5.8, 3));
	}
}

/*
 * 计算器类
 */
class Calculator {
	/*
	 * 方法重载
	 */
	public int sum(int num1, int num2) {
		return num1 + num2;
	}

	public int sum2(int num1, int num2, int num3) {
		return num1 + num2 + num3;
	}

	public double sum(int num1, double num2) {
		return num1 + num2;
	}

	public double sum(double num1, int num2) {
		return num1 + num2;
	}

在这里插入图片描述

对象数组:

package code07_面向对象;
import java.util.Scanner;
public class 练习_对象数组 {
	public static void main(String[] args) {
		String[] names = new String[3];

		Car[] cars = new Car[3];
        
		inputInfo(cars);
		displayInfo(cars);
	}
	/*
	 * 录入车辆信息
	 */
	public static void inputInfo(Car[] cars) {
		Scanner input = new Scanner(System.in);
        
		for (int i = 0; i < cars.length; i++) {
			cars[i] = new Car();
			System.out.println("----------请输入第" + (i + 1) + "辆车的信息---------------");
			System.out.print("请输入车的名称");
			cars[i].name = input.next();
			System.out.print("请输入车的颜色");
			cars[i].color = input.next();
			System.out.print("请输入车的方向");
			cars[i].direction = input.next();
			System.out.print("请输入车的时速");
			cars[i].speed = input.nextInt();
			System.out.print("请输入车的价格");
			cars[i].price = input.nextDouble();

		}
	}

	/*
	 * 显示车辆信息
	 */
	public static void displayInfo(Car[] cars) {
		System.out.println("名称\t颜色\t方向\t时速\t价格");
		System.out.println("---------------------------------da---");
		for (Car car : cars) {
			System.out.println(car.name + "\t" + car.color + "\t" + car.direction + "\t" + car.speed + "\t" + car.price);
		}
	}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值