34-方法:让 Merchandise 对象有行为
0. 目录
- 如果要描述一个商品怎么办?
- 方法——让可以商品描述自己
- 详解 describe 方法
1. 如果要描述一个商品怎么办?
- 看例程
- 每次需要描述商品,都要重复这些代码?一个成熟的商品应该学会自己描述自己
package com.bornforthis.supermarket;
public class Merchandise {
public String name;
public String id;
public int count;
public double soldPrice;
public double purchasePrice;
}
package com.bornforthis.supermarket;
public class MerchandiseDescAppMain {
public static void main(String[] args) {
Merchandise merchandise = new Merchandise();
merchandise.name = "书桌";
merchandise.soldPrice = 999.9;
merchandise.purchasePrice = 500;
merchandise.count = 40;
merchandise.id = "DESK9527";
System.out.println("商品名字叫做" + merchandise.name + ",id是" + merchandise.id + "。 商品售价是" + merchandise.soldPrice
+ "。商品进价是" + merchandise.purchasePrice + "。商品库存量是" + merchandise.count +
"。销售一个的毛利润是" + (merchandise.soldPrice - merchandise.purchasePrice));
}
}
虽然,上面实现了商品描述,但是每次需要都要重新编写一下 MerchandiseDescAppMain 而且编写输出,显然很麻烦,而我们的商品又不是只有一件商品。
当然,你可以说创建一个商品就就 copy 一遍,但是重复太多次还麻烦,而且你还得考虑到,你后期添加一个新功能,那岂不是:你之前重复 copy 了几次,也就意味着你要重复做几次修改「添加新功能」。
这个 merchandise 已经跟随我们很久了,应该学会自己描述自己。
/*
* @Time : 2024/12/23 19:29
* @Author : AI悦创
* @FileName: MerchandiseDescAppMain.java
* @Software: IntelliJ IDEA
* @Version: V1.0
* @Blog : https://bornforthis.cn/
* Code is far away from bugs with the god animal protecting
* I love animals. They taste delicious.
*/
package com.bornforthis.supermarket;
public class MerchandiseDescAppMain {
public static void main(String[] args) {
Merchandise merchandise = new Merchandise();
merchandise.name = "书桌";
merchandise.soldPrice = 999.9;
merchandise.purchasePrice = 500;
merchandise.count = 40;
merchandise.id = "DESK9527";
System.out.println("商品名字叫做" + merchandise.name + ",id是" + merchandise.id + "。 商品售价是" + merchandise.soldPrice
+ "。商品进价是" + merchandise.purchasePrice + "。商品库存量是" + merchandise.count +
"。销售一个的毛利润是" + (merchandise.soldPrice - merchandise.purchasePrice));
Merchandise merchandise2 = new Merchandise();
merchandise2.name = "茅台酒";
merchandise2.soldPrice = 1999.9;
merchandise2.purchasePrice = 1000;
merchandise2.count = 50;
merchandise2.id = "Maotai9527";
System.out.println("商品名字叫做" + merchandise2.name + ",id是" + merchandise2.id + "。 商品售价是" + merchandise2.soldPrice
+ "。商品进价是" + merchandise2.purchasePrice + "。商品库存量是" + merchandise2.count +
"。销售一个的毛利润是" + (merchandise2.soldPrice - merchandise2.purchasePrice));
}
}
2. 方法(Method)——可以让商品描述自己
方法英文名叫做 method,又称作 function。看例程,学习方法的语法。
2.1 原本 Merchandise
package com.bornforthis.supermarket;
public class Merchandise {
public String name;
public String id;
public int count;
public double soldPrice;
public double purchasePrice;
}
2.2 原本的调用 MerchandiseDescAppMain
package com.bornforthis.supermarket;
public class MerchandiseDescAppMain {
public static void main(String[] args) {
Merchandise merchandise = new Merchandise();
merchandise.name = "书桌";
merchandise.soldPrice = 999.9;
merchandise.purchasePrice = 500;
merchandise.count = 40;
merchandise.id = "DESK9527";
System.out.println("商品名字叫做" + merchandise.name + ",id是" + merchandise.id + "。 商品售价是" + merchandise.soldPrice
+ "。商品进价是" + merchandise.purchasePrice + "。商品库存量是" + merchandise.count +
"。销售一个的毛利润是" + (merchandise.soldPrice - merchandise.purchasePrice));
}
}
2.3 MerchandiseV2
package com.bornforthis.supermarket;
public class MerchandiseV2 {
public String name;
public String id;
public int count;
public double soldPrice;
public double purchasePrice;
String madeIn;
// >> TODO 访问修饰符 public
// >> TODO 返回值类型:无需返回值则用 void 表示,void 是 Java 中的关键字
// >> TODO 方法名:任意合法的标识符都可以 describe
// >> TODO 参数列表:后续讲解
// >> TODO 方法体:方法的代码 就是大括号里面
// >> TODO 方法体内部定义的变量叫做局部变量
public void describe() {
double netIncome = soldPrice - purchasePrice;
System.out.println("商品名字叫做" + name + ",id是" + id + "。 商品售价是" + soldPrice
+ "。商品进价是" + purchasePrice + "。商品库存量是" + count +
"。销售一个的毛利润是" + netIncome + "。制造地为" + madeIn);
}
}
2.4 MerchandiseV2DescAppMain
package com.bornforthis.supermarket;
public class MerchandiseV2DescAppMain {
public static void main(String[] args) {
MerchandiseV2 merchandise = new MerchandiseV2();
merchandise.name = "书桌";
merchandise.soldPrice = 999.9;
merchandise.purchasePrice = 500;
merchandise.count = 40;
merchandise.id = "DESK9527";
merchandise.madeIn = "China";
merchandise.describe();
}
}
3. 访问控制修饰符
Java 中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java 支持 4 种不同的访问权限。
- default (即默认,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。
- private : 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)
- public : 对所有类可见。使用对象:类、接口、变量、方法
- protected : 对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类)。
我们可以通过以下表来说明访问权限:
修饰符 | 当前类 | 同一包内 | 子孙类(同一包) | 子孙类(不同包) | 其他包 |
---|---|---|---|---|---|
public | Y | Y | Y | Y | Y |
protected | Y | Y | Y | Y/N | N |
default | Y | Y | Y | N | N |
private | Y | N | N | N | N |
3.1 默认访问修饰符-不使用任何关键字
使用默认访问修饰符声明的变量和方法,对同一个包内的类是可见的。接口里的变量都隐式声明为 public static final,而接口里的方法默认情况下访问权限为 public。
如下例所示,变量和方法的声明可以不使用任何修饰符。
String version = "1.5.1";
boolean processOrder() {
return true;
}
3.2 私有访问修饰符-private
私有访问修饰符是最严格的访问级别,所以被声明为 private 的方法、变量和构造方法只能被所属类访问,并且类和接口不能声明为 private。
声明为私有访问类型的变量只能通过类中公共的 getter 方法被外部类访问。
Private 访问修饰符的使用主要用来隐藏类的实现细节和保护类的数据。
下面的类使用了私有访问修饰符:
public class Logger {
private String format;
public String getFormat() {
return this.format;
}
public void setFormat(String format) {
this.format = format;
}
}
......
4. 详解 describe 方法
4.1 方法的调用
- 通过引用的点操作符,可以调用对象的方法
- 方法调用要有括号,即使没有参数
4.2 方法可以使用的数据:对象的成员变量(member variable )
欢迎关注我公众号:AI悦创,有更多更好玩的等你发现!
公众号:AI悦创【二维码】
AI悦创·编程一对一
AI悦创·推出辅导班啦,包括「Python 语言辅导班、C++ 辅导班、java 辅导班、算法/数据结构辅导班、少儿编程、pygame 游戏开发」,全部都是一对一教学:一对一辅导 + 一对一答疑 + 布置作业 + 项目实践等。当然,还有线下线上摄影课程、Photoshop、Premiere 一对一教学、QQ、微信在线,随时响应!微信:Jiabcdefh
C++ 信息奥赛题解,长期更新!长期招收一对一中小学信息奥赛集训,莆田、厦门地区有机会线下上门,其他地区线上。微信:Jiabcdefh
方法一:QQ
方法二:微信:Jiabcdefh
- 0
- 0
- 0
- 0
- 0
- 0