精华内容
下载资源
问答
  • 抽象类为什么不能创建对象?

    千次阅读 2020-07-18 21:37:02
    在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类抽象类往往用来表征对问题领域...

    目录

    抽象类

    比较区别

    创建对象


    抽象类

    面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

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

    比如,在一个图形编辑软件的分析设计过程中,就会发现问题领域存在着圆、三角形这样一些具体概念,它们是不同的,但是它们又都属于形状这样一个概念,形状这个概念在问题领域并不是直接存在的,它就是一个抽象概念。而正是因为抽象的概念在问题领域没有对应的具体概念,所以用以表征抽象概念的抽象类是不能够实例化的。


    比较区别

    与具体类比较

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

    2. 允许(但不要求)抽象类包含抽象成员。

    3. 抽象类不能被密封。

    与接口比较 

    抽象类表示该类中可能已经有一些方法的具体定义,但是接口就仅仅只能定义各个方法的界面(方法名,参数列表,返回类型),并不关心具体细节。

    接口是引用类型的,和抽象类的相似之处有三点:

    1. 不能实例化;

    2. 包含未实现的方法声明;

    3. 派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方法包括其他成员)。 [2] 

    抽象类与接口紧密相关。然而接口又比抽象类更抽象,这主要体现在它们的差别上:

    1. 类可以实现无限个接口,但仅能从一个抽象(或任何其他类型)类继承,从抽象类派生的类仍可实现接口,从而得出接口是用来解决多重继承问题的。

    2. 抽象类当中可以存在非抽象的方法,可接口不能,且它里面的方法只是一个声明必须用public来修饰没有具体实现的方法。

    3. 抽象类中的成员变量可以被不同的修饰符来修饰,可接口中的成员变量默认的都是静态常量(static final)。

    4. 抽象类是对象的抽象,然而接口是一种行为规范。

     


    创建对象

    抽象类尚未实现方法,所以不能创建对象。

    创建对象去调用方法是指做明确的事情,而这个抽象方法并不明确,所以只有继承抽象类去实现抽象方法才可以。

    展开全文
  • WindowAdapter抽象类为什么能new出来?

    千次阅读 2013-06-04 10:54:51
    最近初学Java中看到一段代码,我们给java做的图形界面添加关闭事件的时候,使用了WindowAdapter这个如下  Frame window = new java.awt.Frame("windowsTest"); window.addWindowListener(new WindowAdapter() ...

    最近初学Java中看到一段代码,我们给java做的图形界面添加关闭事件的时候,使用了WindowAdapter这个类如下

       

         Frame window = new java.awt.Frame("windowsTest");
    		window.addWindowListener(new WindowAdapter() {
    			public void windowClosing(WindowEvent e) {
    				System.exit(0);
    			}
    		});
    在JDK文档中发现WindowAdapter不是一个抽象类么,为什么能被new呢?

    并且只实现了windowClosing,没有实现其他的方法不会报警告呢?


    引用的解答:

    1.适配器实现了所有的接口方法,不过是空方法非抽象方法,在其子类中只要覆盖感兴趣的方法就行。这是一种设计模式,适配器设计,因为要实现所有的接口方法,数量实在太多了,有点不方便,才采用这种过渡类。

    2.WindowAdapter里面的方法都不是抽象方法,这是匿名内部类的写法,里面new 后面写的名称是这个匿名类所实现的接口或者父类,返回的是匿名类对象

    展开全文
  • 抽象类为什么不能被实例化?

    千次阅读 多人点赞 2019-12-04 21:54:39
    今天无意中看到一个问题:为什么抽象类不能实例化? 很多人的答案都是再说使用抽象类的好处,但是并没有回答为什么不能实例化?这个过程就像是在回答:为什么公鸡不能下蛋?然后回答是使用公鸡可以打鸣。 按照我的...

    今天无意中看到一个问题:为什么抽象类不能实例化?
    很多人的答案都是再说使用抽象类的好处,但是并没有回答为什么不能实例化?这个过程就像是在回答:为什么公鸡不能下蛋?然后回答是使用公鸡可以打鸣。
    按照我的理解,如果不对,欢迎补充。
    答案是规定
    为什么我这么理解,原因有以下几点。

    1. 第一点:回归问题最初,我们为什么要实例化?
      我们先逆向思维来考虑,从面向对象的思想来看:
      我们需要完成实现一个功能,而功能中的方法,是由对象来调用的,因此我们需要对象,因此我们需要实例化。
      那么回归本问题,什么是抽象类?
      抽象:就是不具体的意思。类是对对象的具体描述,而抽象类不具体,没有方法体,(提供的成员不足以生成一个具体对象),那么就无法生成一个不具体的对象。就好比,你可以实例化一个苹果,但你不能实例化一个水果(这个现实中存在的实物)。

    2. 内存考虑:
      对象实例化的时候,关键字new向JVM申请内存,这个类的成员(成员变量,成员方法)会被保存到内存中。而抽象类,没有具体的成员(成员变量,成员方法),没办法准确分配内存。

    3. 现实逻辑:
      按照现实逻辑,抽象是从现实实物的抽离,总结,比如定义一个动物类接口。这个接口是所有动物所共有的特点组成在一起,但是并不能组成现实中真真正正存在的物种。那么为什么要有抽象类?

    4. 设计层面:
      为了实现多态,当某些类只希望作为父类使用,不希望被实例化。也就是我们从上层设计角度,就不希望有些类被实例化。当我们进行设计的时候需要尽量依赖父类,越向上层的类越稳定,不容易被修改。
      综上所述:现实逻辑,面向对象,设计,内存都不希望我们实例化抽象类,所以编译器规定不能实例化在这里插入图片描述
      关于抽象类可以看这篇文章
      还需要注意的一点是实例化和有没有构造方法没有关系,构造方法只是初始化对象的,new关键字向JVM申请内存来创建对象的。

    展开全文
  • 在c++和java中我们会定义很多类,但是我们会遇到在对类进行new实例化时会遇到“不能实例化抽象类”或者“抽象类不能实例化”,针对这个问题要首先理解两个内容“抽象类”和“实例化” 如果只是想单纯的理解,那么...

    在c++和java中我们会定义很多类,但是我们会遇到在对类进行new实例化时会遇到“不能实例化抽象类”或者“抽象类不能实例化”,针对这个问题要首先理解两个内容“抽象类”和“实例化”

    如果只是想单纯的理解,那么意思就是你画了一个有四条边的图形你说是矩形

    但是这是不可以的,为什么?因为矩形还有一个条件就是要四个内角是直角

    其中画有四条边的图形就是抽象类,矩形就是实例化

    如果理解了含义但是不懂代码中的定义,那么那么就百度百度定义!定义真的很重要!

    抽象类定义:

    含有纯虚函数的类称为抽象类

    实例化的定义:

    用类创建对象的过程

    纯虚函数的定义:

    一个只有函数名、参数和返回值类型,没有函数体的函数成为纯虚函数。

    这一层懂了当然最好

    如果不懂再来看看代码test 中shape未编译通过

    #include <iostream>
    using namespace std;
    //定义一个形状抽象类(基类)
    class Shape {
        //保护继承 ,其派生类也会继承保护成员
      protected:
        double x;
        double y;
        //公有继承
      public:
        void set(double i, double j) {
            x = i;
            y = j;
        }
        //纯虚函数
        virtual void area() = 0;
    };
    //定义矩形类并定义其面积为长*宽(派生类)
    class Rectangle : public Shape {
        void area() { cout << x * y << endl; }
    };
    
    int main() {
        Rectangle rec; //定义一个矩形对象(实例化)
        // Shape rec;
        Shape *p = &rec; //定义一个抽象类的指针,并使它指向矩形对象
        p->set(2, 4);    //调用
        p->area();
        return 0;
    }

    详细定义矩形,可以实例化并正常输出

    未定义,提示含有纯虚函数无法抽象实例化对象

    展开全文
  • Java抽象类不能创建对象

    万次阅读 2017-03-06 14:35:21
    抽象类和接口都创建对象,只是后边的new不能是new他们自己,但可以new他们的实现类(必须是类,不抽象类和接口), 人们使用抽象类和接口只是为了说明要干什么事,而让他们的实现类去根据自己的需要去实现这些...
  • 抽象类不能继承接口

    千次阅读 2017-09-21 10:21:43
    1. 抽象类可以继承普通类,但可以继承接口。 (public abstract class 抽象类 extends 普通类 { }) 2. 接口可以继承多接口,但可以继承抽象类。 (public abstract class 接口1 extends 接口2,接口3 ,接口4{ }...
  • 构造器就是为了初始化对象而存在的吗 既然抽象类不能被实例化 那为什么 还要按个构造器 ?
  •       接口是我们常用的,抽象类好像并不是怎么常用,但这并代表他重要,他可以被继承,可以有构造方法,可以给类中...普通类加abstract即为抽象类抽象类不能够被实例化,也就是说
  • 它们的语法区别:1)接口不能有构造方法,抽象类可以有。2)接口不能有方法体,抽象类可以有。3)接口不能有静态方法,抽象类可以有。4)在接口中凡是变量必须是public static final,而在抽象类中没有要求。 忽然...
  • 抽象类

    千次阅读 多人点赞 2020-01-12 21:57:45
    抽象类一定有抽象方法,但是有抽象方法的类必须定义为抽象类 C.抽象类不能实例化 因为他不是具体的。 抽象类具有构造方法,但是不能实例化。构造方法的作用是什么?子类对父类数据进行初始化 D:抽象的的子类 a:...
  • Java抽象类 详解

    万次阅读 多人点赞 2016-10-05 00:06:35
    一、抽象类的基本概念普通类是一个完善的功能类,可以直接产生实例化对象,并且在普通类中可以包含有构造方法、普通方法、static方法、常量和变量等内容。而抽象类是指在普通类的结构里面增加抽象方法的组成部分。...
  • 什么抽象类什么是抽象方法?

    千次阅读 2019-03-06 21:09:42
    抽象类抽象类就是不能使用new方法进行实例化的类,即没有具体实例对象的类,抽象类有点类似于“模板”的作用,目的是根据其格式来创建和修改新的类,对象不能抽象类直接创建,只可以通过抽象类派生出新的子类,再...
  • 抽象类不能进行实例化吗?

    万次阅读 2017-07-26 10:55:44
    抽象类可以有自己的构造方法,但是不能直接通过new进行实例化。但是可以通过子类继承,实例化子类的时候抽象类也会被实例化。
  • 为什么呢? 因为我说动物,你知道我说的是什么动物吗?只有看到了具体的动物,你才知道,这是什么动物。所以说,动物本身并不是一个具体的事物 而是一个抽象的事物。只有真正的猫,狗才是具体的动物。同理,我们也...
  • 接口和抽象类的区别是什么? •接口的方法默认是 public,所有方法在接口中不能有实现(Java 8 开始接口方法可以有默认实现),而抽象类可以有非抽象的方法。 •接口中的实例变量默认是 final 类型的,而抽象类中则...
  • (2)特点:抽象成员必须在抽象类中声明,但抽象类不要求必须包含抽象成员,抽象类只能当做基类使用,而不能直接实例化。抽象类的用途提供多个派生类可共享的基类的公共定义。 (3)举例: public abstract class ...
  • java-抽象类和继承抽象类

    万次阅读 2018-02-09 16:17:15
    抽象类不能直接实例化,需要创建一个指向自己的对象引用(其子类)来实例化 代码: public class Main { public static void main(String[] args) { /* People people = new People(); */ //错误 People p =...
  • 提示错误 1 error C2259: “AndQuery”: 不能实例化抽象类 d:\vsproject\new_query\new_query\query.h 155 1 New_query 错误 2 error C2259: “OrQuery”: 不能实例化抽象类 d:\vsproject\new_query\new_query\...
  • 接口和抽象类可以被new嘛?——顺便总结内部类

    万次阅读 多人点赞 2015-08-04 21:04:13
    听到这个问题,我的第一反应是肯定不行啊,直接对接口和抽象类调用new,编译器都过去。但是他说,考官说可以,用匿名内部类实现。听见这个回到,我感觉那个考官太…………,有点无语。我们可以仔细分析下这个问题...
  • Java 抽象类

    千次阅读 多人点赞 2019-01-28 09:16:52
    Java 抽象类 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并是所有的类都...由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计...
  • java抽象类到底能不能够实例化?

    千次阅读 2020-03-07 16:31:58
    抽象类能不能被实例化? 测试 创建一个AbstractFruit抽象类 public abstract class AbstractFruit { public AbstractFruit(){ System.out.println("我是Fruit的抽象类,我被实例化了"); } public abstract v...
  • 今天我们谈谈为什么抽象类不能有静态的抽象方法以及static修饰的方法不能被重写可以被继承 1 static修饰的方法不能被重写可以被继承 我们知道static修饰的方法为静态方法,可以直接使用类名.方法名进行调用...
  • 这篇文章我讲解一个编程中遇到一个错误,那就是提示”不能实例化抽象类的错误“,在输出窗口有如下的错误提示信息,如下图: 根据具体情况不同,可能涉及到的类也可能不同,但是道理是一样的,之所以出现这样的...
  • java抽象类和接口有什么意义

    千次阅读 2021-02-04 16:53:06
    为什么接口和抽象类不能实例化,为什么接口可以多个实现而抽象类只能单继承,特别是java8之后,抽象类和接口里面都可以写代码后,就更加分清了,今天重新整理一下。 什么是抽象类(abstract class) 使用abstract...
  • java抽象类

    万次阅读 多人点赞 2019-05-13 21:39:28
    下面小编给大家讲一个java的抽象类,在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 702,611
精华内容 281,044
关键字:

抽象类为什么不能new