概念
- 不需要具体过程,只需要对对象进行编程
- 抽象一个类,里面包含所有解决问题的办法,不需要对过程具体化
- 三大特性:封装,继承,多态
设计类、对象
- 类:对象共同特征的描述
- 对象:真实存在的具体实例
∴先要设计类才能创建对象
类
格式
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());
}
}