单例模式:
饿汉单例:
定义一个类,将构造器私有;
定义一个静态变量储存一个对象;
package example;
public class HungryMan {
/**
* 饿汉单例在获取对象前,对象已经提取准备好了一个。
* 这个对象只能是一个,用以定义静态成员变量。
*/
public static HungryMan hungryMan = new HungryMan();
//私有的构造函数
private HungryMan(){
}
}
懒汉单例设计模式:
在真正需要该对象的时候,才去创建一个对象。
步骤:
定义一个类,将构造器私有;
定义一个静态变量储存一个对象;
提供一个返回单例对象的方法;
package example;
public class LazySingleton {
/**
定义一个静态的成员变量负责储存一个对象,只加载一次,只有一份
注意:最好私有化,不然调用时会通过“.”显示出来
*/
private static LazySingleton singleton ;
//提供一个方法,对外返回单例对象
public static LazySingleton getInstance(){
if (singleton == null){
//第一次来拿对象,此时需要创建对象。
singleton = new LazySingleton();
}
return singleton;
}
private LazySingleton(){
}
}
编程模式不只这两个,还有很多。
继承(三大特征之一):
在Java中提供一个关键字extends,用这个关键字,可以让一个类和另一个类建立“父”与“子”的关系。当子类继承父类后,就可以直接使用父类的公共的属性和方法了,这样处理解决了大量相同代码的重复编写。
继承设计规范:
子类们的相同特征(共性属性,共性方法)放在父类中定义,子类独有的属性和行为应该定义在子类自己里面。
继承的特点:
1、子类可以继承父类的属性和行为,但是子类不能继承父类的构造器。
2、Java是单继承模式:一个类只能继承一个直接父类。
3、Java不支持多继承、但是支持多层继承。
4、Java中所有的类都是Object类的子类。
注意事项:
1、子类可以继承父类的属性和行为,但是不能继承父类的构造器。
2、Java是单继承模式:一个类只能继承一个直接父类。
3、Java不支持多继承、但是支持多层继承。
4、Java中所有的类都是Object类的子类。
在子类方法中 访问成员(成员变量、成员方法)满足:就近原则
先子类局部范围找。再子类成员范围找,然后父类成员范围找,如果父类范围还没有找到则报错。
方法重写:
在继承体系中,子类写一个与父类声明一样的方法覆盖父类的方法。
应用场景:
当子类需要父类的功能,但父类的该功能不完全满足自己的需求时。
子类可以重写父类中的方法。
重写注意事项:
重写方法的的名称、形参列表必须与被重写的方法的名称和参数列表一致。
私有的方法不能被重写
子类重写的父类方法时,访问权限必须大与或者等于父类
子类不能重写父类的静态方法,如果重写会报错。
super关键字:
当只需要使用父类的功能时,使用super关键字就可以实现。
@Override:
重写校验注解,如果重写有误,则报错。
继承后构造器的特点:
子类中所有的构造器默认都会先访问父类中无参的构造器,再执行自己。
使用super调用父类有参数构造器可以初始化继承父类的数据。
如果父类中没有无参数构造器,只有有参数构造器,则会报错。所有可以通过super( ),手动调用父类的有参数构造器。
this( ):借用兄弟构造器
this( )和super( )使用注意事项:
子类通过this( )去调用本类的其它构造器,本类其它构造器会通过super去手动调用父类的构造器,最终还是会调用父类的构造器。
这两者都只能放在构造器的第一行,所以二者不能共存在同一个构造器中。
感谢黑马程序员的网络学习资源!