精华内容
下载资源
问答
  • 抽象类不可以定义对象的引用
    千次阅读
    2020-10-09 08:59:46

    如题

    更多相关内容
  • 可以用一个抽象类定义一个指向该类的指针,但是能定义或声明对象。 这个中原因就是,定义一个类的对象是,编译器在编译时需要了解类的所有信息以便准确的为要实例化的对象分配内存;由此可见,定义一个类对象是要...

    可以用一个抽象类定义一个指向该类的指针,但是不能定义或声明对象。

    这个中原因就是,定义一个类的对象是,编译器在编译时需要了解类的所有信息以便准确的为要实例化的对象分配内存;由此可见,定义一个类对象是要生成一个类的实例的,而C++规定抽象类是不能实例化的,所以会报出如下错误:

    error C2259: 'CBase' : cannot instantiate abstract class

    >        due to following members:
    >        'int CBase::func(int)' : is abstract
    public:
     virtual int func(int param) = 0;
    private:
    };
    public:
     CTestA();
     ~CTestA();
     virtual int func(int param);
    private:
     int m_value;
    };
    {
     CBase cb0; //定义或声明一个对象,error
     CBase *cb = new CTestA(); //定义一个指针,OK
    }

     

    但是定义一个指针就不同了,指针是什么?大家都知道,无论它指向的是内部类型还是自己定义的结构体类型还是类的类型变量,它只不过就是一个具有32BIT也就是4个字节内存的空间而已,不需要其他任何信息了,所以能成功定义一个抽象类的指针变量。

     

    class CBase{

    class CTestA:public CBase{

    int _tmain(int argc, _TCHAR* argv[])

     return 0;


    展开全文
  • 抽象类为什么能创建对象

    千次阅读 2020-07-10 17:24:06
    在C++中,含有纯虚拟函数的类称为抽象类,它能生成对象;在java中,含有抽象方法的类称为抽象类,同样能生成对象抽象类完整的,它只能用作基类。在面向对象方法中,抽象类主要用来进行类型隐藏和充当...

    抽象类是什么?

    抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。

    通常在编程语句中用 abstract 修饰的类是抽象类。在C++中,含有纯虚拟函数的类称为抽象类,它不能生成对象;在java中,含有抽象方法的类称为抽象类,同样不能生成对象。

    抽象类是不完整的,它只能用作基类。在面向对象方法中,抽象类主要用来进行类型隐藏和充当全局变量的角色。

     通过上面的阐述,大家应该对抽象类有了一个大概的认识吧!但是对纯虚拟函数和抽象方法分别是什么还是有一定的模糊

    纯虚函数:纯虚函数是一种特殊的虚函数,在许多情况下,在基类中不能对虚函数给出有意义的实现,而把它声明为纯虚函数,它的实现留给该基类的派生类去做。这就是纯虚函数的作用。

    纯虚函数也可以叫抽象函数,一般来说它只有函数名、参数和返回值类型,不需要函数体。这意味着它没有函数的实现,需要让派生类去实现。

    抽象方法:java中的抽象方法就是以abstract修饰的方法,这种方法只声明返回的数据类型、方法名称和所需的参数,没有方法体,也就是说抽象方法只需要声明而不需要实现。

    为什么抽象类还不能创建对象? 

    首先与具体的类作比较:

    1. 抽象类不能直接实例化,并且对抽象类使用 new 运算符会导致编译时错误。虽然一些变量和值在编译时的类型可以是抽象的,但是这样的变量和值必须或者为 null,或者含有对非抽象类的实例的引用(此非抽象类是从抽象类派生的)
    2. 允许(但不要求)抽象类包含抽象成员。
    3. 抽象类不能被密封。

     与接口作比较:

    相同点——不能实例化、包含未实现的方法声明、派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方法包括其他成员)

    不同点——

    1. 类可以实现无限个接口,但仅能从一个抽象(或任何其他类型)类继承,从抽象类派生的类仍可实现接口,从而得出接口是用来解决多重继承问题的。
    2. 抽象类当中可以存在非抽象的方法,可接口不能,且它里面的方法只是一个声明必须用public来修饰没有具体实现的方法。
    3. 抽象类中的成员变量可以被不同的修饰符来修饰,可接口中的成员变量默认的都是静态常量(static final)
    4. 抽象类是对象的抽象,然而接口是一种行为规范。

    在Java中的应用:

    1. abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface
    2. 在abstract class 中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在 interface中一般不定义数据成员),所有的成员方法都是abstract的。
    3. abstract class和interface所反映出的设计理念不同。其实abstract class表示的是"is-a"关系,interface表示的是"like-a"关系。
    4. 实现抽象类和接口的类必须实现其中的所有方法。抽象类中可以有非抽象方法。接口中则不能有实现方法
    5. 接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值
    6. 抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以重新赋值、
    7. 接口中的方法默认都是 public,abstract 类型的
    展开全文
  • 抽象类概述分析事物时, 发现了共性的内容,就出现向上抽取,但是如果父类 的方法功能与子类不同,那么这时就抽取方法主体,这样抽取出来的方法 就是抽象方法 什么是抽象类有抽象方法的类 抽象类和普通的父类有什么区别...

    b21eb33baf91d5eef0d7b4c736a826c6.png

    抽象类概述

    分析事物时, 发现了共性的内容,就出现向上抽取,但是如果父类 的方法功能与子类不同,那么这时就不抽取方法主体,这样抽取出来的方法 就是抽象方法

    什么是抽象类

    有抽象方法的类

    抽象类和普通的父类有什么区别?

    有抽象方法

    抽象方法又是什么?

    使用 abstract 关键字修饰方法,该方法就成了抽象方法,抽象方法只包含一个方法名,而没有方法体

    总结: 
        1. 将像的部分和相似的部分抽取到一个父类当中(共性内容向上抽取)
                ***抽象类,就是一个特殊父类***
        2. 抽象类和普通父类的区别在于, 抽象类可以定义抽象方法
        3. 当我们将共性的行为(方法) 抽取到父类之中后, 发现该行为在父类中描述不清了,
        但这个行为还是子类(强制重写)必须要做的行为,就可以定义为抽象方法
    
                举例:  
                        动物类 :
                            eat(); //将共性的eat方法抽取到父类中后,发现该行为描述不清了
                        猫类 :
                            eat() { 吃<●)))><< };
                        狗类 :
                            eat() {吃肉};

    抽象类和抽象方法如何定义?

    抽象方法:
    去掉方法体的大括号,然后分号结束,并在返回值类型前面加入关键字[abstract]
    public abstract void eat () ;
    限制:抽象方法,必须存活在抽象类或者是接口当中
    抽象类如何定义: 在class 前面加入[abstract]
    public abstract class Student  {}

    抽象类的子类必须要重写抽象类的抽象方法(或者把自己也变成抽象类)

    抽象类的特点

    A . 抽象类和抽象方法必须使用abstract关键字修饰
    B . 抽象类中不一定有抽象方法,但是有抽象方法的一定是抽象类或接口
    C . 抽象类不能实例化 (实例 = 对象) [也就是不能创建对象],如果非要实例化,可以通过多态的形式创建,也就是 父类引用指向子类对象
    实例化:
    Animal a = new Dog();
    //多态调用方法,编译看左边(检查父类中有没有eat方法),运行看右边(执行的是子类的eat方法)
    a.eat();
    D . 抽象类的子类 1.重写父类(抽象类)中所有的抽象方法[推荐方案] 2.要么将自己也变成一个抽象类

    抽象类的成员特点

    总结:
        1. 成员变量: 
                ● 可以是一般变量
                ● 也可以是常量
    
        2. 成员方法:
                ● 可以是一般方法
                ● 也可以是抽象方法
    
        3. 构造方法:
                有,目的是为了方便子类进行初始化的
    
        结论: 抽象类中除了可以定义抽象方法以外,其余的定义和普通的类是一样的

    注意事项

    关于抽象类的使用,


    1. 抽象类不能创建对象,如果创建了,编译无法通过而报错,只能创建其非抽象子类的对象


    2. 抽象类中,可以有构造方法,是供子类创建对象时,初始化父类成员使用的


    3. 抽象类中.不一定包含抽象方法,但是有抽象方法一定要是抽象类


    4.抽象类的子类,必须重写抽象父类中所有抽象方法,否则,编译无法通过而报错, 除非该子类也是抽象类

    展开全文
  • 抽象类能创建对象吗?

    千次阅读 2020-07-15 00:27:20
    什么是抽象类呢? 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并...3.因为父类引用指向子类对象时,调用的方法是子类重写的方法,一般父类中的描述不够具体,并是说抽象类的构造方法没有意.
  • Java抽象类不能创建对象

    万次阅读 2017-03-06 14:35:21
    人们使用抽象类和接口只是为了说明要干什么事,而让他们的实现类去根据自己的需要去实现这些方法,比如说抽象类定义一个eat()方法, 它并没有说这个方法具体怎么做,羊就可以吃草,虎就可以吃肉,羊和虎都实现了这...
  • Java抽象类/抽象方法定义及其特性详解

    千次阅读 多人点赞 2019-09-28 18:37:53
    定义抽象类的作用是将一类对象的共同特点抽象出来,成为代表该类共同特性的抽象概念,其后在描述某一具体对象时,只要添加与其他子类对象的不同之处,而需要重复类的共同特性。这样就使得程序概念层次分明,开发更...
  • 抽象类能否创建对象

    千次阅读 2020-07-16 20:06:40
    人们使用抽象类和接口只是为了说明要干什么事,而让他们的实现类去根据自己的需要去实现这些方法,比如说抽象类定义一个eat()方法,它并没有说这个方法具体怎么做,羊就可以吃草,虎就可以吃肉,羊和虎都实现了这个...
  • 接口是我们常用的,抽象类好像并不是怎么常用,但这并代表他重要,他可以被继承,可以有构造方法,可以给类中的成员变量赋初值,接口就没有这样的功能。       抽象类的出现使得...
  • Java抽象类和抽象方法如何定义

    千次阅读 2020-11-18 23:46:06
    具体的类是可以被初始化为对象的,在类的声明前面加上抽象类关键词abstract,则该类就会成为一个抽象类。 abstract public class Canine extends Animal { public void roam () {} } 编译器不会让你初始化抽象类,...
  • 抽象类的用法以及定义

    万次阅读 2016-07-15 15:07:34
    与具体类比较 1.抽象类不能直接实例化 2.抽象类可以不含抽象方法 ...3.抽象类中含有抽象方法时,如果子类继承该抽象类...7.抽象类含有非抽象方法,而且子类继承该类时,重写了该方法,那么该子类的对象调用该方法时
  • 抽象类和接口的区别以及抽象类和接口的使用场景

    万次阅读 多人点赞 2019-05-30 18:15:44
    在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就可以称之为抽象类。 1.抽象方法:使用...
  • 文章目录java的接口为什么能实例化呢?总结: java的接口为什么能实例化呢? 首先,我们需要明白实例化的含义。实例化实际意义是在jvm的堆中...具体所占用的内存空间(也就是堆里的一块地址)所存放的值是的成
  • Java中的抽象类和接口

    千次阅读 多人点赞 2022-04-08 15:17:42
    各位铁汁们大家好呀!今天让我们继续学习java,看看java中的抽象类和接口到底是什么? 里面也会讲到多态呀,一起来看看吧
  • 关于C++抽象类建立对象的问题

    千次阅读 2017-02-04 10:18:06
    抽象类是无法建立对象、但可以定义指针、该指针可以指向它的派生类,进而实现多态性
  • C#学习入门(三)—— 抽象类

    千次阅读 2020-11-08 21:50:49
    目录1.抽象类的概念和定义1.1 定义1.2 抽象方法1.3 重写抽象方法1.4 抽象类和具体类的区别1.5 ... 在C#中,抽象类可以包含:抽象方法、抽象属性、具体方法和具体属性。 1.1 定义 访问修饰符 abstract class 类名 { 访
  • java抽象类 继承

    千次阅读 2021-03-08 06:02:32
    关于java抽象类 继承的搜索结果回答抽象类和接口的区别:默认的方法实现抽象类可以有默认的方法实现完全是抽象的。接口根本存在方法的实现。抽象类可以有已经实现了的方法,也可以有被abstract修饰的方法(抽象...
  • 继承是面向对象的三大特征之一,可以使得子类具有父类的方法和属性,还可以在子类中重新定义,追加属性和方法。 继承的格式 ● 格式:public class 子类名extends父类名{} ●范例:public class Zi extends Fu{} ...
  • 第四章 抽象类与接口

    千次阅读 2020-04-11 21:02:46
    抽象类(Abstract Class)1、定义2、特点3、目的4、实例二.接口(Interface)1、定义2、特点3、目的4、实例三.抽象类与接口区别1、结构2、继承方式3、构造方法4、多/单继承5、速度6、设计举例四.父类的静态方法能...
  • 抽象类和接口

    千次阅读 2020-11-24 19:38:35
    抽象类 ​ 概述 ​ 父类当中的方法,被他的子类们重写,子类的各自实现又一样。那么父类的方法声明和方法体,只有声明还有意义,而方法体内容则没有存在的意义。我们把这种没有方法体内容的方法称为抽象方法。...
  • 抽象类定义?为什么要使用抽象类?

    千次阅读 2018-07-16 20:18:15
    3 当看到一个类是抽象的,要关心他的抽象方法, 因为他的子类一定会重写他,然后去找抽象类引用,,会有多态性的体现 4 面向对象复杂但是是为了方便解决问题  5 含有抽象方法的类必须定义抽象类 ...
  • Java 抽象类和接口

    千次阅读 热门讨论 2021-11-14 16:09:56
    文章目录一、抽象类1....在Java面向对象当中,所有的对象都是用过类进行描绘的,但是并是所有的类都是用来描绘对象的,如果一个类没有包含足够多的信息来描述一个具体的对象,这样的类就是抽象类。 1.2抽象方法的
  • 面向对象编程之继承、多态、封装、抽象类、接口、包继承类的继承格式为什么要继承继承的特点继承的种类及关键字访问权限多态向上转型动态绑定方法重写重写和重载的区别比较多态的优点封装实现Java的封装封装的优点...
  • c++抽象类抽象类指针笔记

    千次阅读 2020-06-20 21:14:47
    抽象类能用来定义对象而只作为一种基本类型用作继承的类,称为抽象类,由于它常用作基类,通常称为抽象基类。凡是包含纯虚函数的类都是...虽然抽象类不定义对象,但是可以定义指向抽象类数据的指针变量。 ...
  • JAVA 抽象类,抽象方法

    千次阅读 2021-04-22 21:18:22
    抽象类其实就是给他的所有子类定义了一套模板。子类可以在这个模板上进行扩展。通过抽象类可以严格的限制了子类的设计。如一个抽象类Animal中有一个抽象方法run.public class Animal{public abstract void run();}...
  • C#抽象类和抽象方法(很详细,你值得拥有!!!)

    千次阅读 多人点赞 2020-06-18 19:10:32
    什么是抽象类? 什么是抽象方法? 抽象类和抽象方法有什么特性? 抽象类的使用场景? 抽象类的作用? 抽象类和接口的区别? 抽象类和抽象方法怎么声明? 抽象类和抽象方法如何使用?
  • Python中的定义对象的创建

    万次阅读 多人点赞 2018-08-16 17:35:59
    1. :对一事物的描述,是抽象的、概念上的定义。比如做石膏像的模型 2.对象:实际存在的该事物的每个个体,因而也称实例(instance)。比如石膏像 二者的关系:对象是由派生的、创建的。一个类可以创建无穷多...
  • 3.抽象类(shape)

    千次阅读 2021-05-27 19:11:12
    3 抽象类 定义一个抽象类shape,包括公有的计算面积area方法,计算体积volume方法,输出基本信息...在main方法中,定义shape类的对象引用派生类的对象,输出三类对象的基本信息,面积,体积。 public class Test {
  • C++的抽象类详解

    千次阅读 2020-05-21 09:58:26
    在介绍抽象类之前,我们先介绍一下纯虚函数。 1.纯虚函数 在基类中仅仅给出声明,不对虚函数实现定义,而是在派生类中实现。这个虚函数称为纯虚函数。普通函数如果仅仅给出它的声明而没有实现它的函数体,这是编译...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 370,246
精华内容 148,098
关键字:

抽象类不可以定义对象的引用