面向对象**
面向对象的三大特征:封装、继承、多态。
面向对象的编程叫做OOP
创建对象:类名 对象名=new 构造器();
类
类是对象共同特征的饿描述,对象是真实存在的具体实例
在Java中,必须先设计类,才能完成对象的创建和使用
//一个工程文件当中只能有一个public修饰的类,并且这个类必须和文件名一直
修饰符 class 类名(首字母大写,需要用驼峰命名方法){
1.成员变量Field:描述类或者对象的属性信息
2.成员方法Method:描述类或者对象的行为,
3.构造器Constrector:初始化一个类的对象返回
4.内部类
5.代码块
}
//在调用的时候
Dog d=new Dog();//先在堆中开辟空间,然后在调用构造方法
修饰符:
-
Public 共有的
-
Private 私有的
-
Protected
-
缺省值
若局部变量没有修饰符的时候,他的标识符的值和他所在的方法的修饰符相同。
## 继承(后面补全)
-
类的继承是指在一个现有的类的基础上构建了一个新的类,构建出来的新类被称为现有类的子类,并且子类会拥有父类所有可以继承的属性和方法。
-
在java中想要声明一个类可以继承另一个类需要使用extends关键字:
-
当子类重写父类的方法后,子类对象将不能访问父类被重写的方法
所以为了解决这个问题JAVA提供了一个super关键字用于实现访问父类的成员。
如何设计类
public class类名{
1.成员变量(代表属性,一般是名词)
2.成员方法(代表行为,一般是动词)
3.构造器
4.代码块
5.内部块
}
购物车模块的模拟和架构搭建
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8NH02ysw-1659955525216)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220706191144600.png)]
定义商品类
public class Goods {
int id;//编号
String name;//名称
double price;//价格
int buyNumber;//购买数量
}
定义输入方法
private static void addGood(Goods[] shopCar,Scanner scanner) {
System.out.println("请输入商品的编号,不允许重复");
int id=scanner.nextInt();
System.out.println("请输入商品的名称");
String name=scanner.next();
System.out.println("请输入商品的价格");
double price=scanner.nextDouble();
System.out.println("请输入商品的购买数量");
int buyNumber=scanner.nextInt();
//进行封装数据将数据封装到g当中
Goods g=new Goods();
g.id=id;
g.name=name;
g.price=price;
g.buyNumber=buyNumber;
//将数据进行传入数组当中
for (int i = 0; i < shopCar.length; i++) {
if (shopCar[i]==null){//说明此位置没有元素可以进行赋值
shopCar[i]=g;
break;//如果不结束,赋值之后还会一直运行
}
}
System.out.println("你的商品添加购物车成功");
}
查看商品信息,并进行输出商品列表
//进行查询输出商品列表
private static void chaxunGood(Goods[] shopCar,Scanner scanner) {
// System.out.println("请输入你要查询的编号:");
// int i=scanner.nextInt();
System.out.println("======商品列表======");
System.out.println("编号"+"\t\t"+"名称"+"\t\t"+"价格"+"\t\t"+"购买的数量");
for (int i1 = 0; i1 < shopCar.length; i1++) {
Goods g = shopCar[i1];
if (g!=null){
System.out.println(g.id+"\t\t"+g.name+"\t"+g.price+"\t"+g.buyNumber);
} else{
break;
}
}
}
通过输入编号进行查询商品,然后进行修改金额和购买的数量
private static void XiuGaiGood(Goods[] shopCar,Scanner scanner) {
System.out.println("请输入你要查询的编号:");
int x=scanner.nextInt();
for (int i = 0; i < shopCar.length; i++) {
Goods g=shopCar[i];
if (g.id==x){
System.out.println("======商品列表======");
System.out.println("编号"+"\t\t"+"名称"+"\t\t"+"价格"+"\t\t"+"购买的数量");
System.out.println(g.id+"\t\t"+g.name+"\t"+g.price+"\t"+g.buyNumber);
System.out.println("请输入你想修改的商品价格");
double price=scanner.nextDouble();
g.price=price;
System.out.println("请输入你修改的数量");
int buy=scanner.nextInt();
g.buyNumber=buy;
System.out.println("======商品列表======");
System.out.println("编号"+"\t\t"+"名称"+"\t\t"+"价格"+"\t\t"+"购买的数量");
System.out.println(g.id+"\t\t"+g.name+"\t"+g.price+"\t"+g.buyNumber);
break;
}else{
System.out.println("没有查询到该编号信息");
}
}
}
根据ID进行查询商品,结算出该商品的总价
private static void jiesuanGood(Goods[] shopCar,Scanner scanner) {
System.out.println("请输入你要查询的编号:");
int x=scanner.nextInt();
double sum;
for (int i = 0; i < shopCar.length; i++) {
Goods g=shopCar[i];
if (g.id==x){
sum=g.price*g.buyNumber;
System.out.println(g.name+"的商品总价格为"+sum);
break;
}else{
System.out.println("没有查询到该编号信息");
}
}
}
构造器
-
真正知道对象具体是通过调用什么代码得到的?
-
能够掌握为对象赋值的其他简便的写法?
-
为以后学习面向对象编程的其他内容做支撑。
-
构造器通常是给对象的成员变量进行初始化操作的
构造器是定义在类中的,可以用于初始化一个类的对象,并返回对象的地址。
构造方法不能通过”对象.“这种方式来获取
我们目前只知道用new进行调用
构造器没有返回值,但是也不能写void
构造器的格式
修饰符 类名 (形参列表){ …… } 例如: public class Car{ …… //无参数的构造器 public Car(){ …… } //有参数的构造器 public Car(String n,double p){ } }
调用构造器的格式:
类 变量名=new 构造器;
构造器的分类和作用
无参数构造器(默认存在的):初始化对象的时候,成员变量的数据采用默认值
若是没进行创建构造器,会赠送一个默认的构造器。
有参数构造器:在初始化对象的时候,同时可以接受参数为对象进行赋值
案例: 生成一个Car类,里面存放一个无参数构造方法和一个有参数的构造方法 public class Car { String name; double price; //无参数的构造方法 public Car(){ System.out.println("无参数"); } public Car(String n,double p){ System.out.println("有参数"); name=n; price=p; } } 生成一个Test类,进行调用无参数的构造方法和有参数的构造方法,在调用有参数的构造方法的时候,需要注意进行传参。 public static void main(String[] args) { Car car=new Car(); System.out.println(car.name); System.out.println(car.price); Car car1=new Car("奔驰",561); System.out.println(car1.name); System.out.println(car1.price); } 运行之后的结果为: 无参数 null 0.0 有参数 奔驰 561.0
注意事项
一旦定义了有参数的构造器,系统就不会赠送无参数构造器,需要自己写一个无参数的构造器,才可以使用,否则会报错。