Java 面向对象之单例模式及多态
基础
注解
设计模式
单例设计(提高性能,节省内存空间,解决多重占用)
饿汉式(空间换时间,线程安全)
在类中创建私有构造方法
创建私有静态该实例对象
在创建过程中实例化对象
创建公有静态方法提供实例对象
将该实例化返回
懒汉式(时间换空间,存在线程风险)
在类中创建私有构造方法
创建私有静态该实例对象
在创建过程中不用实例化对象
创建公有静态方法提供实例对象
判断该对象是否实例化,没有实例化则实例化,有则直接返回。
….
多态(多种形态)
理解:对同一消息做出不同的反应。如动物类中的一个“叫声”方法,子类兔子和狗引用重写该方法时不同。
类型(两种)
- 编译时多态(方法重载)
- 运行时多态
必要条件
- 满足继承关系
- 父类引用指向子类对象
向上转型(隐式转型:父类引用指向子类实例):小类转型为大类,无法调用子类特有方法。
向下转型(子类引用指向父类对象,需满足转型条件):使用instanceof进行判断是否具有转型条件
instanceof运算符
用于返回左边的对象是否为右边对象的实例
抽象类及抽象方法
抽象类限制实例化(用于无效实例)
1
2
3
4// 无效实例化(无意义)
Animal animal = new Animal('Yaya',12);
// 正确实例化
Dog dog = new Animal('Yaya',12); 可用abstract关键字(不允许实例化)定义类成为抽象类,用于提示无意义实例化对象(Animal animal = new Animal(‘Yaya’,12);)。
抽象方法
方法上添加abstract关键字成为抽象方法,继承该类后必须重写其抽象方法,否则报错。
规则:
- 包含抽象方法的类是抽象类
- 抽象类中可以没有抽象方法
- static、final、private不能出现在抽象类及抽象方法中
接口(interface关键字)
implements关键字:实现接口
接口类中可以存在默认方法和静态方法,都可以带方法体,但必须注意是JDK1.8版本后才支持。
1
2
3
4
5
6
7
8// default:默认方法
default void test1(){
System.out.println("接口中默认链接");
}
// static:静态方法
static void test1(){
System.out.println("接口中静态方法");
}调用方法优先级:本类中重写的方法>父类方法>接口方法
内部类
定义:一个类可以定义在另一个类中或者方法中。
包含内部类的类称为外部类。
分类
- 成员内部类(普通内部类)
- 静态内部类
- 方法内部类
- 匿名内部类
成员内部类(普通内部类)
静态内部类
- 静态内部类中,只能直接访问外部类的静态方法或成员,如果需 调用非静态方法或成员,则通过外部类对象访问。
- 静态内部类对象实例时,可以不依赖外部类对象。
- 可以通过外部类.内部类.静态成员的方式,访问内部类中的静态成员。
方法内部类
定义:定义在外部类方法中的内部类。
- 和方法内部成员使用规则一样。
- 类中不能包含静态成员。
- 类中可以包含final、abstract关键字。
匿名内部类
1
2
3
4
5
6
7
8PersonTest test = new PersonTest();
// 匿名内部类实现
test.getRead(new Person(){
public void read(){
System.out.println("男生喜欢科幻小说");
}
})- 匿名内部类没有类型名称、实例对象名称。
- 编译后的文件命名:外部类$数字.class
- 无法使用private、public、protected、abstract、static修饰符。
- 无法编写构造方法,可以在构造代码块中完成。
- 不能出现静态成员。
- 可以实现接口也可以继承父类,但不兼得。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 CodeWhale-Blog!
评论





