事实证明,abstract类除了不能用new实例化和类没什么区别

abstract类是抽象类,不能够实例化,大家都知道,abstract类往往和接口interface一块儿使用,针对接口中一些公共的方法进行实现,然后实体类去继承抽象类和接口。虽然abstract类不能实例化,但是abstract类可以有构造函数,其构造函数和实体类的构造函数没什么区别。如下:

 abstract class A
    {
        public A()
        {
            Console.Write("A  ");
        }

        public virtual void Method()
        {
            Console.Write("AMethod ");

        }
    }

    class B:A
    {
        public B()
        {
            Console.Write("B ");
        }

        public new void Method()
        {
            Console.Write("BMethod ");

        }
    }

今天遇到一个问题是这样:

 A o = new B();
 o.Method();

猜想输出结果是什么呢?我第一眼给出的答案是B AMethod;在我想象中抽象类A不能够实例化,所以A的构造函数无效。

运行以后发现答案是A B AMethod;这说明了abstract类的构造函数和类的构造函数是一样的,可以被子类继承,只能不能用new创建而已。

时间: 2024-11-02 16:04:36

事实证明,abstract类除了不能用new实例化和类没什么区别的相关文章

3星|林毅夫《战胜命运》:事实证明华盛顿共识是错误的,GIFF是穷国发展正道。

本书是林毅夫与喀麦隆一位经济学家合著.基本的观点是:事实证明华盛顿共识是错误的,GIFF是穷国发展正道.GIFF的主要思想是政府找到对标国家,强力推行产业政策. 作为一个经济学外行,读后感觉关于华盛顿共识的错误的推理过程是比较严密的,但是作者推崇的指引穷国致福的明灯GIFF,没有实际应用的案例,这应该是GIFF比较大的一个缺陷. 全书有一些经济学的公式,相对来说可读性稍差. 近期林毅夫给吉林开的振兴经济的药方,基本跟书中的思路一致. 总体评价3星. 以下是书中一些信息的摘抄: 1:简而言之,本书

事实证明,应用市场是个流量的生意(产品能力并不足以形成护城河)

此后的事实证明,应用市场是个流量的生意.应用市场本身并不是很有技术门槛,而产品功能和UI上的模仿则更快.产品能力并不足以形成护城河,豌豆荚的前工程师说,“对手都盯着我们抄,我们都习惯了.”而腾讯.360.百度本身的技术产品能力不弱,模仿一个新功能,快的话只要一个月时间,而且它们都有流量上的优势. 豌豆荚并非没有意识到这一点.王俊煜所说的“伟大的公司”,跟他的做移动端内容搜索的计划有关,它们希望能够靠搜索技术,把消耗大量用户时长的内容,包括小说.音乐.视频.游戏,都抓取到豌豆荚的平台上.2014年

python开发学习-day07(面向对象之多态、类的方法、反射、新式类and旧式类、socket编程)

s12-20160227-day07 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* BLOCKS =============================================================================*/ p, blockquote, ul, ol, dl, table, pre { margin

为什么基类指针和引用可以指向派生类对象,但是反过来不行?

为什么基类指针和引用可以指向派生类对象,但是反过来不行? 基类指针和引用 BaseClass *pbase = NULL; DerivedClass dclass; pbase = & dclass; 基类指针和引用可以指向派生类对象,但是无法使用不存在于基类只存在于派生类的元素.(所以我们需要虚函数和纯虚函数) 原因是这样的: 在内存中,一个基类类型的指针是覆盖N个单位长度的内存空间. 当其指向派生类的时候,由于派生类元素在内存中堆放是:前N个是基类的元素,N之后的是派生类的元素. 于是基类的

java中常用的包、类、以及包中常用的类、方法、属性-----io包

由于最近有需要,所以下面是我整理的在开发中常用的包.类.以及包中常用的类.方法.属性:有需要的看看 java中常用的包.类.以及包中常用的类.方法.属性 常用的包 java.io.*; java.util.*; java.lang.*; java.math.*; java.sql.*; java.text.*; java.awt.*; javax.swing.*;   包名 接口 类 方法 属性 java.io.*; java.io.Serializable实现序列化 java.io.Buffe

eclipse从数据库逆向生成Hibernate实体类(eclipse中反向生成hibernate实体类+jpa注释)

eclipse从数据库逆向生成Hibernate实体类 做项目必然要先进行数据库表设计,然后根据数据库设计建立实体类(VO),这是理所当然的,但是到公司里做项目后,让我认识到,没有说既进行完数据库设计后还要再"自己"建立一变VO.意思是,在项目设计时,要么根据需求分析建立实体类,由正向生成数据库表:要么就先进行数据库表设计,再逆向生成实体类.没有说进行完任意一方的设计后再去花时间去自己匹配建立另一方的设计. 原因是: 1. 1.5倍工作量,浪费时间.(时间对公司来说很重要) 2. 无法

使用Resources类搭建Unity简单的资源管理工具类

Unity资源加载的方式有: 1.脚本拖拽(本地) 2.Resources加载(本地) ★ 3.AssetBundle加载(本地,远程[www])★ 本篇将使用Resources类搭建一个简单的资源管理工具类 Resources是Unity下的特殊文件夹,使用需自行创建Resources文件夹(命名必须正确) 使用Resources文件夹就需要用到Resources类的一些方法,如下: Resources类 Load 从Resources文件夹加载单个资源(可指定类型) LoadAll 从Res

C++:类成员函数的重载、覆盖和隐藏区别?

#include <iostream> class A { public: void func() { std::cout << "Hello" << std::endl; } void func(int k) { } }; class B : public A { public: using A::func; // 把这句注释掉试试,嘿嘿 void func(int i) { } }; int main() { B b; b.func();//编译

C# 调用API接口处理公共类 自带JSON实体互转类

using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Net.Security; using System.Security.Cryptography.X509Certificates; using System.Text; using System.Threading.Tasks; using System.Web; n