Java面向对象(OOP)

概念

  • 不需要具体过程,只需要对对象进行编程
  • 抽象一个类,里面包含所有解决问题的办法,不需要对过程具体化
  •  三大特性:封装,继承,多态 

设计类、对象

  • 类:对象共同特征的描述
  • 对象:真实存在的具体实例

∴先要设计类才能创建对象

格式

public class 类名{
	1、成员变量(属性)
	2、成员方法(行为)
	3、构造器
	4、代码块
	5、内部类
}

//调用类的对象
类名 对象名 = new 类名()

//使用对象
访问属性:对象名.成员变量
访问行为:对象名.方法名()

例一

package blackhorse2;

public class Test1 {

	public static void main(String[] args) {
		Car a = new Car();
		a.name = "桑塔纳";
		a.price = 100000;
		a.star();
		a.carPrice();
        System.out.println(a);//会直接得到a对象在堆内存的地址
        Car b = a;//浅拷贝
	}
}


package blackhorse2;

public class Car {

	//成员变量
	String name;
	double price;

	//行为
	public void star() {
		System.out.println(name+"启动!");
	}
	public void carPrice() {
		System.out.println(name+"的价格是"+price);
	}
}

例二:购物车系统

//Main
package shoppingtrolley;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);

		Goods[] shopCar = new Goods[100];//[null,null,null,...]
		while(true){
			System.out.println("请您选择您的操作:");
			System.out.println("1.添加商品");
			System.out.println("2.查询商品");
			System.out.println("3.修改商品");
			System.out.println("4.结算商品");
			System.out.println("5.退出系统");
			String judge = sc.nextLine();
			switch(judge) {
			case"1":
				add(shopCar,sc);
				break;
			case"2":
				check(shopCar,sc);
				break;
			case"3":
				update(shopCar,sc);
				break;
			case"4":
				pay(shopCar);
				break;
			case"5":
				return;
			default:
				System.out.println("您的输入有误");
			}
		}	
	}
	
	public static void add(Goods[] shopCar,Scanner sc) {
		System.out.println("请输入添加商品的编号:");
		int id = sc.nextInt();
		System.out.println("请输入添加商品的名称:");
		String name = sc.next();
		System.out.println("请输入添加商品的价格:");
		double price = sc.nextDouble();
		System.out.println("请输入添加商品的数量:");
		int number = sc.nextInt();	
		Goods a = new Goods();
		a.id = id;
		a.name = name;
		a.price = price;
		a.number = number;
		
		for(int i = 0;i<shopCar.length;i++)
		{
			if(shopCar[i]==null) {
				shopCar[i] = a;
				break;
			}
		}
		System.out.println("您输入的商品已经添加成功");

	}
	public static void check(Goods[] shopCar,Scanner sc) {
		System.out.println("请输入您要查询的商品编号:");
		int id = sc.nextInt();
		for(int i =0;shopCar[i]!=null;i++) {
			Goods a = shopCar[i];
			if(a.id==id) {
				System.out.println("你您查询的商品信息如下");
				System.out.println("ID : "+a.id);
				System.out.println("名字: "+a.name);
				System.out.println("价格: "+a.price);
				System.out.println("数量: "+a.number);
				System.out.println("合计: "+(a.number*a.price)+"元");			
			}else {
				System.out.println("您输入的编号不存在");
			}
		}
		
	}
	public static void update(Goods[] shopCar, Scanner sc) {
		System.out.println("请输入您要查询的商品编号:");
		int id = sc.nextInt();
		for(int i =0;shopCar[i]!=null;i++) {
			Goods a = shopCar[i];
			if(a.id==id) {
				System.out.println("请输入您要修改的数据");
				System.out.println("1.价格");
				System.out.println("2.数量");
				System.out.println("3.删除此商品");
				String judge = sc.nextLine();
				switch(judge) {
					case"1":
						System.out.println("请输入您要修改的值:");
						a.price = sc.nextDouble();
						System.out.println("修改完成");
						break;
					case"2":
						System.out.println("请输入您要修改的值:");
						a.number = sc.nextInt();
						System.out.println("修改完成");
						break;
					case"3":
						shopCar[i] = null;
                        System.out.println("删除成功");
						break;
				}
			}else {
				System.out.println("您输入的编号不存在");
			}
		}
		
	}
	public static void pay(Goods[] shopCar) {
		double sum = 0;
		System.out.println("商品统计");
		for(int i =0;shopCar[i]!=null;i++) {
			Goods a = shopCar[i];
			System.out.println("编号:"+a.number+" 名称:"+a.name+" 价格:"+a.price+" 数量:"+a.number);
			sum += (a.price*a.number);
		}
		System.out.println("商品总价:"+sum);
	}
}

//Goods类
​
package shoppingtrolley;

public class Goods{
	String name;
	double price;
	int number;
	int id;
}

封装 

  • 概念:告诉我们如何正确设计对象的属性和方法
  • 封装原则:对象代表什么,就得封装对应的数据,并提供数据对应的行为

 更好的封装:private

package test4;

public class Student {
    //以下格式成为JavaBean,除了那个加过判断的setAge,通常送到JavaBean时数据已经被处理好了
	//更好的封装
	//私有化成员变量,只能在本类中访问
	private String name;
	private int age;
	
	//提供成套的getter和setter
    //给name和age赋值
	public void setName(String name) {
		this.name = name;
	}
	public void setAge(int age) {
		if(age<0||age>150)
		{
			System.out.println("您输入有误");
		}else {
			this.age = age;
		}
	}

	//提供获取年龄和名字的方法
	public int getAge() {
		return age;
	}
	public String getName() {
		return name;
	}
	
	//无参构造器
	public Student() {
		
	}
}



package test4;
import java.util.Scanner;
public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入您的年龄");
		Student s = new Student();
		s.setName("张三");
		int age = sc.nextInt();
		s.setAge(age);
		System.out.println(s.getAge());
		System.out.println(s.getName());
	}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值