抽象类可以有构造函数吗

我们知道,抽象类是不能被实例化的。但抽象类是否可以有构造函数?答案是可以有。抽象类的构造函数用来初始化抽象类的一些字段,而这一切都在抽象类的派生类实例化之前发生。不仅如此,抽线类的构造函数还有一种巧妙应用:就是在其内部实现子类必须执行的代码。

以下就是在抽象类的构造函数中来初始化字段。

    class Program
    {
        static void Main(string[] args)
        {
            Employee employee = new Employee();
            Console.WriteLine(employee.ID);
            Console.ReadKey();
        }
    }

    public abstract class Base
    {
        private Guid _id;

        public Base()
        {
            this._id = Guid.NewGuid();
        }

        public Guid ID
        {
            get { return this._id; }
        }
    }

    public class Employee : Base
    {

    }

总结:虽然抽象类不能被实例化,但可以有构造函数。由于抽象类的构造函数在实例化派生类之前发生,所以,可以在这个阶段初始化抽象类字段或执行其它与子类相关的代码。

抽象类可以有构造函数吗

时间: 2024-08-08 22:05:32

抽象类可以有构造函数吗的相关文章

Java 构造函数(抽象类中的构造函数) 和 加载

博客分类: 面向对象设计的原则 与 概念 1. Java 的构造函数 与初始化块: a. 抽象类的构造函数 若果在父类中(也就是抽象类)中显示的写了有参数的构造函数,在子类是就必须写一个构造函数来调用父类的构造函数 abstract class Person {   //定义一个抽象类,必须被继承 Person(int i) { } } public class Student extends Person { Student() { super(int i)://必须显示的调用父类构造方法//

为什么抽象类中的构造函数可以被继承并被调用?

namespace ConsoleApplication12 { public abstract class A { static A() { Console.WriteLine("static A"); } public A() { Console.WriteLine("normal A"); } } public class B : A { static B() { Console.WriteLine("static B"); } publi

PHP的抽象类、接口的区别和选择[转载]

区别: 1.对接口的使用是通过关键字implements.对抽象类的使用是通过关键字extends.当然接口也可以通过关键字extends继承. 2.接口中不可以声明成员变量(包括类静态变量),但是可以声明类常量.抽象类中可以声明各种类型成员变量,实现数据的封装.(另JAVA接口中的成员变量都要声明为public static final类型) [php] view plaincopy <?php abstract class Father { function meth1() { echo &qu

抽象函数和抽象类

函数由函数的定义(返回值类型.函数名和参数列表)和函数体构成. 抽象函数:只有函数的定义,没有函数体,使用abstract关键字定义.如 abstract void fun(); 错误原因:在一个类当中拥有一个或多个抽象函数,那这个类必须定义为抽象类. 什么是抽象类? 使用abstract定义的类叫做抽象类(基类). [1] 不能调用抽象类的构造函数从而生成抽象类的对象. [2] 一个类当中包含抽象函数,那么这个类必须是抽象类. [3] 一个类当中没有抽象函数,那么这个类也可以是抽象类. 抽象类

总结接口与抽象类的异同点

接口 1 因为java不支持多重继承,所以有了接口,一个类只能继承一个父类,但可以实现多个接口,接口本身也可以继承多个接口. 2 接口里面的成员变量默认都是public static final类型的.必须被显示的初始化. 3 接口里面的方法默认都是public abstract类型的.隐式声明. 4 接口没有构造方法,不能被实例化. 5 接口不能实现另一个接口,但可以继承多个接口. 6 类如果实现了一个接口,那么必须实现接口里面的所有抽象方法,否则类要被定义为抽象类. 抽象类 1 如果将一个类

day7抽象类、接口、多态

抽象类 为什么使用抽象类 1:定义Dog类 有颜色属性和叫的方法 2:定义Bird类 有颜色属性和叫的方法 3:定义其父类Animal 1:抽取共性颜色属性和叫的方法 1:颜色的属性可以使用默认初始化值. 2:叫的方法在父类中如何定义? 1:狗是旺旺 2:鸟是叽叽喳喳 3:可以将父类的方法定义为狗叫让鸟继承父类重写叫的方法 1:鸟怎么确定是否要重写父类方法. 2:不重写,编译和运行都没有问题,只是执行鸟叫的方法就会出现狗叫 4:父类的方法很难确定. 4:抽象类 1:当描述一个类的时候,如果不能确

java中抽象类与接口

接口 1 因为java不支持多重继承,所以有了接口,一个类只能继承一个父类,但可以实现多个接口,接口本身也可以继承多个接口. 2 接口里面的成员变量默认都是public static final类型的.必须被显示的初始化. 3 接口里面的方法默认都是public abstract类型的.隐式声明. 4 接口没有构造方法,不能被实例化. 5 接口不能实现另一个接口,但可以继承多个接口. 6 类如果实现了一个接口,那么必须实现接口里面的所有抽象方法,否则类要被定义为抽象类.   抽象类 1 如果将一

面向对象——抽象类

当描述事物的时候,没有足够的信息对该事物进行描述,那么该描述对应得嘞就是一个抽象类. 1.没有方法铁定方法是抽象方法,一定定义在抽象类中 2.抽象类和抽象方法必须用abstract关键字修饰 3.抽象类可以不被实例化,因为抽象方法没有意义 4.抽象类必须由其子类覆盖掉所有的抽象方法之后,其子类才可以进行实例化,否则盖子类还是一个抽象类. 细节问题: 1.抽象类是一个父类 2.抽象类是有构造函数的,因为是给子类对象提供初始化动作的 3.抽象类中可以不定义抽象方法. 4.抽象关键字不能和 final

java4android (抽象类和抽象函数)

抽象函数的语法特征 抽象类的语法特征 抽象类的作用 抽象类就是用来被继承的 1.什么是抽象函数 只有函数的定义,没有函数体的函数被称为抽象函数: abstract void fun(); 2.什么是抽象类(一般称为基类) abstract class Person{} 使用abstract定义的类被称之为抽象类: (1)抽象类不能够生成对象: (2)如果一个类当中包含有抽象函数,那么这个类必须被声明为抽象类: (3)如果一个类当中没有抽象函数,那么在这个类也可以被声明为抽象类.(有时候让此类不能