1.1接口(抽象类与接口,优先使用接口)
抽象方法和全局常量的集合,使用interface定义,使用implements继承
接口可以多继承(可以向上强制转换)
接口只能有public,一般不写常量
接口可以定义一系列的内部接口,包括:内部的普通类、内部抽象类、内部接口,其中使用 static
定义的内部接口就相当于是一个外部接口。
interface IMessage{public static final String MSG = "JK";public abstract void print();}interface INew{public abstract String get();}// 接口继承接口只能用extendsinterface C extends IMessage,INew{public abstract void printC();}// 抽象类可以继承接口abstract class AbstractMessage implements INew{public abstract void printMessage();}// 一个类可以实现多个接口class MessageImpl extends AbstractMessage implements IMessage,INew{public void print(){}public String get(){return IMessage.MSG;}public void printMessage(){System.out.println("cxl");}}class CImpl implements C{public void print() {}public String get() {return IMessage.MSG;}public void printC() {System.out.println("printC");}}public class JkDemo {public static void main(String[] args) {MessageImpl mg = new MessageImpl();INew news = (INew)mg; // 可以向上转换System.out.println(news.get());AbstractMessage am = (AbstractMessage)mg;am.printMessage();CImpl c = new CImpl();c.printC();}}
接口的定义与使用
定义操作标准
表示能力
在分布式开发之中暴露远程服务方法
1.2工厂设计模式(解耦合、提升代码复用程度)
interface IFruit{public abstract void eat();}// 使用factory可以解耦合class Factory{public static IFruit getInstance(String className){if ("apple".equals(className)) {return new apple() ;}if ("orange".equals(className)) {return new orange() ;}return null ;}}class apple implements IFruit{public void eat(){System.out.println("直接吃苹果!");}}class orange implements IFruit{public void eat(){System.out.println("剥皮吃橘子!");}}public class FactoryDemo {public static void main(String[] args) {IFruit fruit = Factory.getInstance ("apple") ;fruit.eat();fruit = Factory.getInstance ("orange") ;fruit.eat();}}
1.3代理设计模式(Proxy)
代理的本质:每笔真实业务操作都有一个与之辅助的功能类功能完成
interface ISubject{public void save();}class RealSubject implements ISubject{public void save(){System.out.println("救人!");}}// 代理实现class ProxySubject implements ISubject{private ISubject subject; // 真正的操作者public ProxySubject(ISubject subject){this.subject = subject;}public void broke(){System.out.println("代理:破门!");}public void get(){System.out.println("代理:获奖!");}public void save(){this.broke();subject.save();this.get();}}class FactorySubject{public static ISubject getInstance(){return new ProxySubject(new RealSubject());}}public class ProxyDemo {public static void main(String[] args) {ISubject sub = FactorySubject.getInstance();sub.save();}}
接口是Java的核心,慢慢需要学习到接口更多的使用以及设计
开发之中优先考虑接口,以避免单继承局限。
匿名内部类
由于接口、抽象类不能实例化,所以在new时直接跟大括号里面写方法
普通类也可以这么写,但这不规范
object类
所有的类都继承自object,他是最高统一类型
直接输出类是地址,可以覆写
字符串是王道
object可以接收所有的引用类型
包装类
包装类值得是将基本数据类型封装在一个类。
将基本数据类型封装在一个类对象的本质就在于方便使用Object进行接收处理
对象型:Character、Boolean
数值型:Byte、Short、Long、Float、Double、Integer
装箱与拆箱
== 是地址 equals是比较值
主要指的就是使用包装类定义变量、获取变量
包的定义与使用
如果两个类同名,那么定义它们的时候要用全名
访问控制权限
private、default、protected、public
jar包
将生成的程序类打包为jar文件:jar-cvfmy.jarcn
SET CLASSPATH=.;d:\mypack\my.jar
单例设计模式
一个类只能产生一个实例化对象
类中没有构造方法,则会自动生成一个无参的构造方法,但有构造方法的时候,不会生成
只会产生一个对象
饿汉式:只要加载了,一定会创建一个公共的instance对象,追加final
懒汉式:只有调用的时候,才会加载,可能会有性能问题
class Singleton {private final static Singleton instance = new Singleton() ; //饿汉式//private static Singleton instance = null ; //懒汉式public static Singleton getInstance(){//if(instance == null){//instance = new Singleton();//}return instance;}private Singleton() {}public void print() {System.out.println("Hello world ! ");}}public class Dl {public static void main(String[] args) {Singleton s = null;s = Singleton.getInstance();s.print();}}
多例
所谓的多例只是比单例追加了更多个内部实例化对象的产生。
单例、多例构造方法必须私有化
构造方法私有化
类内部一定会有一个static方法用于取得类的实例化对象。多例设计模式已经被枚举所取代了。