黑马程序员java基础单例模式设计、继承与接口知识整合
来源:互联网 发布:淘宝马切达工作室 编辑:程序博客网 时间:2024/04/28 15:22
单例设计模式一:
先初始化对象 称为:饿汉式
开发时一般重这种模式
Single类一进内存就已经创建好了对象。
class Single{private int num;public void setNum(int num){this.num = num;}public int gerNum(){return num;}private Single(){} //将构造函数私有化。private static Single s = new Single();//在类中创建一个本类对象public static Single getInstance() //提供一个方法可以获取到该对象{return s;}}class SingleDemo { public static void main(String[] args) { Single ss = Single.getInstance(); //ss ss2指向堆内存中同 一块内存Single ss2 = Single.getInstance();}}
单例设计模式二
对象是方法被调用时,才初始化,也叫做对象的延时加载。称为:懒汉式。
Single类进内存,对象还没有纯在,只有调用了getInstance方法时才建立对象(延迟加载)。
加锁为题,效率变低
class Single{private int num;public void setNum(int num){this.num = num;}public int gerNum(){return num;}private Single(){} //将构造函数私有化。private static Single s = null; public static Single getInstance() //提供一个方法可以获取到该对象{if(s==null)s = new Single();return s;}}... ...
此处插入线程知识:
加锁控制,防止同时执行
if(s==null){synchronized(Single.class){if(s==null) s = new Single();}}return s;}
定义单例,建议使用饿汉式
多继承存在安全隐患
当多个父类中定义了相同功能,当功能内容不同时,子类对象不确定要运行哪一个
但是java保留了这种机制。并用接口来完成表示,多实现
名词:多层继承,也就是一个继承体系。
如何使用一个继承体系中的功能呢?
想要使用体系,先查阅体系父类的描述,因为父类中定义的是该体系中共性功能。
通过了解共性功能,就可以知道该体系的基本功能。
那么这个体系已经可以基本使用了。
那么在具体调用时,要创建最子类的对象,为什么呢?
一是因为有可能父类不能创建对象。(抽象类 接口)
二是创建子类对象可以使用更多的功能,包括基本的也包括特有的
简单一句话:查阅父类功能,创建子类对象使用功能。
个人理解:子类在创建对象时,父类不会创建一个对象,但是会将父类中的成员变量以及构造函数,函数加载到子类对象分配的内存中。
重写:
1.子类重写父类,必须保证子类权限打于等于父类权限,才可重写以
2.静态只能覆盖静态
区分:
重载:只看同名函数的参数列表。
重写:子父类方法要一模一样。
重点:
子父类中的构造函数。
在对子类对象进行初始化时,父类的构造函数也会运行
因为子类的构造函数默认第一行有一条隐式的语句super();
Super():会访问父类中空参数的构造函数,而且子类中所有的构造函数默认第一行都是super()
为什么子类一定要访问父类中的构造函数?
因为父类中的数据子类可以直接获取,所以子类对象在建立时,需要先查看父类是如何对这些数据进行初始化的。所以子类在对象初始化,要先访问一下父类中的构造函数。
如果要访问父类中指定的构造函数,可以通过手动定义super语句的方式来指定
for(int i = 0; i < 8; i++){final int x = i;System.out.println("被final修饰的x = "+ x);}
//运行结果0,1,2...
super语句一定定义在子类构造函数的第一行(初始化动作要先做)
子类的实例化过程:(必须掌握)
子类的所有的构造函数,默认都会访问父类中空参数的构造函数,
因为子类中每一个构造函数内的第一行都有一句隐式super();
当父类中没有空参数的构造函数时,子类必须手动通过super语句形式来指定
访问父类中的构造函数,
当然:子类的构造函数第一行也可以手动指定this语句来访问本类中的构造函数。子类中至少会有一个构造函数会访问父类中的构造函数。
Final
被final修饰的类不可以被继承,为了避免被继承,被子类复写功能。
常量的书写规范所有字母都大写,如果由多个单词组成,单词间通过——连接。
for(int i = 0; i < 8; i++){final int x = i;System.out.println("被final修饰的x = "+ x);}//运行结果0,1,2...
上面代码所反应的问题还未得到解决
抽象类中的方法不能被直接调用,必须由它的子类进行重写再进行调用。
子类继承抽象类必须重写父类中的所有抽象方法。
特殊:抽象类中可以不定义抽象方法,这样做仅仅是不让该类建立对象。
interface
接口:初期理解,可以认为是一个特殊的抽象类,当抽象类中的方法都是抽象的,那么该类可以通过接口的形式来表示
接口定义时,格式特点:
1. 接口中常见定义:常量,抽象方法。
2.接口中的成员都有固定修饰符。
常量:public static final
方法:public abstract
注意:接口中的成员都是public的。
接口是不可以创建对象的,因为有抽象方法。
需要被子类实现,子类对接口中的抽象方法全都覆盖后,子类才可以实例化。
否则子类是一个抽象类。
多实现之所以可以实现:接口中方法没有方法体,就算有相同方法,但是可以被同一方法统一重写。
接口可以继承接口,接口可以多继承。
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
- 黑马程序员java基础单例模式设计、继承与接口知识整合
- 黑马程序员-【JAVA基础】-继承与接口
- 黑马程序员JAVA基础-单例设计模式
- 黑马程序员:Java基础总结----单例设计模式
- 黑马程序员-------Java基础之单例设计模式
- 黑马程序员 java基础—单例设计模式
- 【黑马程序员】java基础_单例设计模式
- 黑马程序员-->Java基础-->单例设计模式
- 黑马程序员—java基础学习--单例设计模式
- 黑马程序员--java基础--线程,单例设计模式
- 黑马程序员——Java基础->单例设计模式
- 黑马程序员——java基础---单例设计模式
- 黑马程序员------------JAVA基础----单例设计模式
- 黑马程序员——Java基础---单例设计模式
- 黑马程序员-----Java基础-----单例设计模式
- 黑马程序员-JAVA基础之单例设计模式
- 黑马程序员----java基础之单例设计模式
- 黑马程序员-----java基础:面向对象与单例设计模式
- Google Ips
- IOS 程序升级--文件保留情况
- linux CVS服务的用户管理
- android中View.measure方法详解
- skype 多开
- 黑马程序员java基础单例模式设计、继承与接口知识整合
- 获取指定字符串出现的次数
- 驱动程序INF文件详解
- BoneCP数据连接池 配置
- 计算机硬件组成
- 中颖内带LCD资源驱动代码
- 二分查找 三分查找
- Java线程创建方法
- 使用Quartz.NET搭建.net平台下的时间调度系统