面对对象
面向对象中的两个核心概念:
- 类:对一类具备相同特征(属性,行为)事物的抽象描述;
- 对象:类的一个实例;
类的成分
用于描述类的静态信息,表示类的数据。
修饰符 数据类型 变量名 = 默认值
类中另一个组成部分称为行为,以方法(函数)的形式在java中。
修饰符 返回值类型 方法名(参数){
– 执行体
}
对象创建
对象即对类的具象化,类的一个实列
– Student s = new Student(); – (new一个对象)
方法的分类
- 无参数无返回值
public void Student(){
}
```java
- 无参数有返回值
```java
public String names(){
return " 姓名";
}
```java
- 有参数无返回值
```java
public void log(String msg){
System.out.println(msg);
}
- 有参数有返回值
public int max(int a,int b){
return a>b ? a : b ;
}
方法调用
new一个对象
- Student s = new Student;
引用对象.方法名(实参); - s.max(1,2);
构造器
及构造方法,构造函数,构造器;对象创建时完成对于对象的相关属性初始化操作;减少方法对于参数的依赖。
修饰符 类名称(参数){
- 执行体
}
- L构造器的名称必须跟类名称一致 。(alt+/) 快捷键
- 构造器不能包含任何类的返回值 (包括void)。
访问修饰符
- defualt (空白)
- private 私密的; 修饰的的元素,只能够在当前类中被访问。
- protected 只能在同一个包中。或者跨包的子类中被访问。
- public 可以在同一个项目中 任意包访问。
– 类一般使用public修饰
–属性一般使用private修饰
–方法一般使用public修饰
封装
Setter&Getter方法
类中的属性设置为private后,外界无法访问,但是可以通过提供公开的方法对这些私有的属性进行访问。让外界访问方法避免直接让外界访问属性
- 自动生成 :shift+alt+s SetterAndGetter 。
this关键字
this在一个类中用于表示-当前对象-。 this一般用于一个类的成员方法。
横向关系
- 依赖关系
public class Cat{
public boolean catchMouse(Mouse m){
return false;
}
}
- 关联关系
- 聚合关系
- 组合关系
public class Dept{
private int dno;
private String dname;
private String tel;
//setter/getter ...
}
public class Emp{
private int eno;
private String ename;
private double sal;
//员工关联部门
private Dept dept;
//setter/getter ...
}
纵向关系
继承
继承及是由一个类从另一个通过extends关键字继承,被继承的类称为"父类",继承的类称为"子类"。继承可以使得类的 (拓展性提高,减少重复代码 )的编写。
-修饰符 class 子类 extends 父类 {
}
继承的优点
- 子类可以直接通过对象调用父类中的非私有元素
- 子类还可以在父类的基础上拓展新的功能
继承的注意事项
- 子类只能继承父类的属性和方法,不能继承构造器
- 子类对象构造之前会执行父类的构造器
- 一个父类可以存在多个子类,但是一个子类只能存在一个父类
- Java不允许多继承,但支持多重继承
- 被protected修饰的元素可以在子类中被访问,即便父类和子类不在同一个包
super关键字
super关键字用于在子类中调用父类的元素:
- 构造器
- 属性
- 方法
电商系统的商品库存管理
管理类
public class SangPingPlus {
private ShangPing[] list;
private int index;
public SangPingPlus() {
list = new ShangPing[100];
}
//添加所有商品
public void add(ShangPing s) {
list[index++] = s;
}
//查询指定价格范围类的商品
public void showMoney(int money) {
for(int i = 0;i<list.length;i++) {
ShangPing s = list[i];
if(s !=null&&s.getMoney()<= money) {
s.showAll();
}
}
}
//根据编号查询商品信息并显示
public int showId(int id) {
for(int i = 0;i<list.length;i++) {
ShangPing s = list[i];
if(s!=null&&s.getId() == id) {
return i ;
}
}
return -1;
}
//根据编号修改商品的单价和库存
public void upDate(int id,int money,int kucun) {
int i = showId(id);
int z = showId(id);
if(i == -1) {
System.out.println("为找到指定编号的商品");
}else {
list[i].setMoney(money);
list[z].setKucun(kucun);
System.out.println("修改成功");
}
}
//显示所有商品信息
public void allId() {
for(int i = 0;i<list.length;i++) {
ShangPing s = list[i];
if(s!=null) {
s.showAll();
}
}
}
//查询所有库存低与指定数的商品信息
public void showKucun(int kucun) {
for(int i = 0;i<list.length;i++) {
ShangPing s = list[i];
if(s!=null&&s.getKucun()< kucun) {
s.showAll();
}
}
}
}
实体类
public class ShangPing {
private int id;
private String names;
private String leibie;
private int money;
private int kucun;
private String scd;
public ShangPing() {
}
public ShangPing(int id, String names, String leibie, int money, int kucun, String scd) {
super();
this.id = id;
this.names = names;
this.leibie = leibie;
this.money = money;
this.kucun = kucun;
this.scd = scd;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getNames() {
return names;
}
public void setNames(String names) {
this.names = names;
}
public String getLeibie() {
return leibie;
}
public void setLeibie(String leibie) {
this.leibie = leibie;
}
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money = money;
}
public int getKucun() {
return kucun;
}
public void setKucun(int kucun) {
this.kucun = kucun;
}
public String getScd() {
return scd;
}
public void setScd(String scd) {
this.scd = scd;
}
public void showAll() {
System.out.println(id+"\t"+names+"\t"+leibie+"\t"+money+"\t"+kucun+"\t"+scd);
}
}
实现类
public class SSTest {
public static void main(String[] args) {
SangPingPlus sp = new SangPingPlus();
sp.add(new ShangPing(1, "老坛酸菜", "统一", 10, 1200,"武汉"));
sp.add(new ShangPing(2, "红烧牛肉面", "康师傅", 4, 1000,"武汉"));
sp.add(new ShangPing(3, "藤椒", "统一", 5, 500,"武汉"));
sp.add(new ShangPing(4, "香菇顿蘑菇", "统一", 3, 50,"武汉"));
sp.add(new ShangPing(5, "爆辣", "康师傅", 2, 100,"武汉"));
sp.allId();
System.out.println("============================");
sp.upDate(1, 4,1000);
System.out.println("============================");
sp.allId();
System.out.println("============================");
sp.showKucun(500);
System.out.println("============================");
sp.showMoney(5);
}
}