抽象类的构造方法
来源:互联网 发布:乐视手机mac码在哪里 编辑:程序博客网 时间:2024/04/28 22:15
首先要说明的是:抽象类中可以定义构造方法。
在之前认为:1,抽象类是不能实例化的;2,定义抽象类肯定是用来实例化的;3,抽象类中没有构造函数。
这三句话第一句肯定是正确的,第二句和第三句呢,定义抽象类一定要用来继承使用吗?抽象类中没有构造函数吗? (这两个问题会在下面详细解答)
1,抽象类不继承直接用。
就拿前段时间做的图书馆维修管理系统中SqlHelper说吧
代码如下:
这样在D层中,就可以直接用抽象类SqlHelper中的方法啦。
这样做有什么好处:1,抽象类直接使用省去了实例化。(分析内存知:类的实例化一要在堆中new出对象,二要在栈中分配空间指向堆中new出的对象),这两步都省去了。
2,抽象类中的静态方法是存在内存中的,用的时候直接去内存中去取,这样还是提高销量。
直接使用需注意的:抽象类中的方法必须为静态的。
2,抽象类中的构造函数
一直都说抽象函数不能被实例化而构造函数是初始化对象的,好像就暗含着抽象类中没有构造函数或者说抽象类中的构造函数没有作用,书上说抽象类不能被实例化至于构造函数有没有,我们试一试不就知道了。
首先来看一下抽象类中没有构造函数的例子。旨在说明构造函数的作用。
实例1:(C#控制台代码)
实例1结果:
在main函数中,实例化TestAbstract子类时首先去找子类的构造函数进行初始化。至于抽象类中构造函数有没有调用,在实例1中还看不出来。下面请看实例2.
实例2:
实例2在实例1的基础上加构造函数。首先看运行会不会提示编译错误,如果错误说明抽象类中不能有构造函数,如过通过,再看看构造函数是不是有用,会不会被子类的覆盖。
运行结果:
如结果所示,抽象类中的构造函数中的内容也打印出来了,说明抽象类中的构造函数是有作用的。子类继承抽象类时,构造函数不会被覆盖。 而且,在实例化子类对象时首先调用的是抽象类中的构造函数再调用子类中的。
因此,在抽象类中可以使用构造函数封装继承子类公共的东西。
网上有很多篇文章说抽象函数中不能有构造函数,在CSDN上也有几篇说即使有构造函数也用不上的,我也就相信了,直到现在学习分析内存,才想到试一试,实验结果大家也都看到了,跟他们说的不一样。在今后的学习中要带着怀疑的态度去学习知识,不要一味的相信网上说的,也不要一味的不相信他们,遇到分歧,要想到先试一试,事实证明一切。
0 0
- 抽象类的构造方法
- 抽象类的构造方法
- 抽象类的构造方法
- 接口和抽象类的构造方法
- 抽象类与接口的构造方法
- 抽象类中的构造方法
- 方法,构造方法,抽象方法的区别
- Java-调用抽象类中指定参数的构造方法
- java中 抽象类构造方法的理解
- 抽象类的构造函数
- 抽象类的构造函数
- Java-抽象类定义构造方法
- 在抽象基类构造函数调用该抽象方法
- 方法,面向对象,构造方法,继承,多态,抽象类,接口
- C#抽象类的构造函数
- java抽象类构造函数的含义
- c#中的构造器,类的修饰符,虚方法,抽象类
- 建议90:不要为抽象类提供公开的构造方法
- ruby 类,全局变量和 类变量
- tomcat实现多端口、多域名访问
- ListView Item点击不生效的处理办法
- 在ubuntu14.04上安装vmware12专业版
- POJ 3641 Pseudoprime numbers(快速幂,素数)
- 抽象类的构造方法
- 前端常用插件汇总
- angular-数据双向绑定
- AFNetworking 3.0携带参数上传文件Demo
- POJ1330 最近公共祖先
- java项目之——坦克大战07
- API Guides 目录
- 回调函数以及钩子函数的概念
- nw.js node-webkit系列(23)如何检查任务管理器运行了哪些进程