包装类
装箱和拆箱
装箱:基本数据类型—>包装类
public static valueOf(type value)静态工厂方法
静态工厂方法是专门用来创建对象的一个静态方法,功能上与构造器一样,都是用来创建对象的。
获取一个类的实例对象,有两条路可选:
1.构造器
2.静态工厂方法
区别:
1.静态方法可以有自定义的名字。
2.静态方法在需要的情况下可以保证单例模式。
什么是单例模式
这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。
- 1、单例类只能有一个实例。
- 2、单例类必须自己创建自己的唯一实例。
- 3、单例类必须给所有其他对象提供这一实例。
**主要解决:**一个全局使用的类频繁地创建与销毁。
**何时使用:**当您想控制实例数目,节省系统资源的时候。
**如何解决:**判断系统是否已经有这个单例,如果有则返回,如果没有则创建。
拆箱:包装类-》基本数据类型
Boolean boo = Boolean.valueOf("true");//装箱
boolean boo=boo.booleanValue();//拆箱
接口
接口就是某个事物对外提供的一些功能的说明。
面向接口编程的优点:
1.解耦
2.使程序易于扩展。
3.有利于程序的后期维护。
接口 | 抽象类 | |
---|---|---|
关键字 | interface | abstract |
方法 | JDK1.8 以前只有抽象方法(public abstract)、JDK1.8之后还包含默认方法(default)、静态方法(static) | (修饰符只能为public或者protected,默认为public)抽象方法abstract不可省、普通方法、构造方法(不能用于实例化,主要用途是被子类调用) |
成员变量 | 默认为public static final,必须赋初值,不能被修改。 | 默认default,可在子类中被重新定义,也可被重新赋值。 |
实现,子接口/子类 | 子接口可以实现多个接口实现多继承。类实现该接口(含抽象方法)则实现方法,否则也定义为抽象类。 | 子类继承抽象类(含抽象方法)则实现方法,否则也定义为抽象类。 |
特性 | 解决了java单继承的局限性接口强调特定功能的实现 | 抽象类强调所属关系。 |
相同点 | (1)都不能被实例化 | (2)接口的实现类或抽象类的子类都只有实现了接口或抽象类中的方法后才能实例化。 |
## 接口
public interface Person{
//成员变量
public static final int a=10;
//默认default方法
default void sayHello(){
System.out.println("Hello World");
}
//抽象方法
public void say();
//静态方法
public static void work(){
}
}
## 抽象类
public abstract class Person{
//抽象方法abstract不能省
public/protected abstract void say();
//普通方法
public void eat(){}
//构造方法
public MyClass(){}
//属性
public int weight;
}
面向接口编程的实际应用
面向对象编程 OOP 是一种思想,面向接口编程是一种具体的开发方式。
工厂生产产品A,需要用设备A来生产
Factory、EquipmentA
public class EquipmentA {
public void work(){
System.out.println("设备A运行,生产产品A...");
}
}
public class Factory {
private EquipmentA equipmentA;
public EquipmentA getEquipmentA() {
return equipmentA;
}
public void setEquipmentA(EquipmentA equipmentA) {
this.equipmentA = equipmentA;
}
public void produce(){
System.out.println("开始生产...");
this.equipmentA.work();
}
}
public class Test {
public static void main(String[] args) {
EquipmentA equipmentA = new EquipmentA();
Factory factory = new Factory();
factory.setEquipmentA(equipmentA);
factory.produce();
}
}
工厂接了新订单,生产产品B,必须由设备B来生产,工厂中只能有一台设备。
public interface Equiment {
public void work();
}
public class Factory {
private Equiment equiment;
public Equiment getEquiment() {
return equiment;
}
public void setEquiment(Equiment equiment) {
this.equiment = equiment;
}
public void produce(){
System.out.println("开始生产...");
this.equiment.work();
}
}
public class Test {
public static void main(String[] args) {
EquipmentA equipmentA = new EquipmentA();
EquipmentB equipmentB = new EquipmentB();
EquipmentC equipmentC = new EquipmentC();
Factory factory = new Factory();
factory.setEquiment(equipmentC);
factory.produce();
}
}