精华内容
下载资源
问答
  • Java抽象类不能创建对象

    万次阅读 2017-03-06 14:35:21
    抽象类和接口都能创建对象,只是后边的new不能new他们自己,但可以new他们的实现类(必须是类,不能抽象类和接口), 人们使用抽象类和接口只是为了说明要干什么事,而让他们的实现类去根据自己的需要去实现这些...
    比如:日历类(calendar)
    
    
    抽象类和接口都能创建对象,只是后边的new不能是new他们自己,但可以new他们的实现类(必须是类,不能是抽象类和接口),
    人们使用抽象类和接口只是为了说明要干什么事,而让他们的实现类去根据自己的需要去实现这些方法,比如说抽象类定义一个eat()方法,
    它并没有说这个方法具体怎么做,羊就可以吃草,虎就可以吃肉,羊和虎都实现了这个吃的方法。
    
    
    
    
    一个类继承抽象类。用抽象类的子类实例化抽象类的引用。例如
    A是抽象类  B extends A ,并且B实现了A中所有的抽象方法,就可以
    A a = new B();
    
    展开全文
  • 抽象类为什么不能创建对象

    千次阅读 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 类型的
    展开全文
  • 抽象类能创建对象吗?

    千次阅读 2020-07-15 00:27:20
    抽象类不能创建对象的原因: 1.子类更具体,父类更抽象,直接创建父类对象本身没有意义。 2.如果创建的是父类对象再调用方法的时候,调用的父类中的方法,而非子类的方法,它违背了多态的这种思想和设计 3.因为...

    什么是抽象类呢?

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

    抽象类是不能创建对象的原因:

    1.子类更具体,父类更抽象,直接创建父类对象本身没有意义。
    2.如果创建的是父类对象再调用方法的时候,调用的父类中的方法,而非子类的方法,它违背了多态的这种思想和设计
    3.因为父类引用指向子类对象时,调用的方法是子类重写的方法,一般父类中的描述不够具体,并不是说抽象类的构造方法没有意义,那么在创建子类对象时需要先调用父类的构造方法。
    4.抽象类不能直接实例化,并且对抽象类使用 new 运算符会导致编译时错误。虽然一些变量和值在编译时的类型可以是抽象的,但是这样的变量和值必须或者为 null,或者含有对非抽象类的实例的引用(此非抽象类是从抽象类派生的)
     

    展开全文
  • 在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;
    }

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

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

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

    千次阅读 2020-07-16 20:06:40
    抽象类和接口都能创建对象,只是后边的new不能new他们自己,但可以new他们的实现类(必须是类,不能抽象类和接口), 人们使用抽象类和接口只是为了说明要干什么事,而让他们的实现类去根据自己的需要去实现这些...
  • /* 抽象类和接口作为形式参数: ... //抽象类和接口虽然都不能直接创建对象,但是可以通过多态进行对象的创建... */ //************抽象类作为形式参数*********** abstract class Person { publi
  • 接口和抽象类不能实例化对象

    千次阅读 2015-05-12 17:54:54
    ArrayList points = new ArrayList(); Iterator i = points.iterator(); points是ArrayList的对象,用...i是Iterator的引用 引用的是Iterator的实现对象; 方法说明如下: iterator public I
  • 面向对象——抽象类与抽象方法

    千次阅读 2020-04-13 09:26:04
    如果一个类与具体的食物相联系,而只表达一种抽象的概念,仅是作为其派生类的一个基类,这样的类就是派生类,在抽象类中,声明抽象类中声明抽象方法是,如果加上abstract关键字则为抽象方法。abstract 修饰符可...
  • java-面向对象编程-抽象类

    千次阅读 2017-04-04 15:12:40
    我们在上一章中介绍了什么是接口,也说到了接口就是一组抽象的数据模型,可以理解为一...让我们揭开它的盖头来—主角登场–>抽象类。 什么叫抽象类呢?从语义而言,抽象类的意思是指类的抽象体。什么意思呢?我们知道
  • 在注册swing或者swt控件的事件监听器的时候,我们经常通过创建匿名对象的方式避免创建新的类来继承Adapter抽象类或者实现Listener接口,例如: NewGame.addSelectionListener(new SelectionAdapter() { // ...
  • Java抽象类 详解

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

    千次阅读 2018-08-21 21:36:24
    首先声明,用接口或者抽象类实例化一个对象可能的,错误的。 接口、抽象类实现注意点 Interface 属性默认都是 public static final 方法默认都是 public abstract 都不用显示声明 抽象类 至少含有一个...
  • WindowAdapter抽象类为什么能new出来?

    千次阅读 2013-06-04 10:54:51
    最近初学Java中看到一段代码,我们给java做的图形界面添加关闭事件的时候,使用了WindowAdapter这个如下  Frame window = new java.awt.Frame("windowsTest"); window.addWindowListener(new WindowAdapter() ...
  • Java抽象类不可创建对象,但可以调用静态方法将建一个对象,利用多态创建子类对象上转成父类类型。 附代码: public abstract class Dog { private int age; private String sex; private String name; public int...
  • Java学习笔记一面向对象抽象类

    千次阅读 2020-03-16 12:25:28
    抽象方法和抽象类必须使用abstract
  • java-抽象类和继承抽象类

    万次阅读 2018-02-09 16:17:15
    抽象类不能直接实例化,需要创建一个指向自己的对象引用(其子类)来实例化 代码: public class Main { public static void main(String[] args) { /* People people = new People(); */ //错误 People p =...
  • 2、abstract类不能new运算符创建对象; 3、若一个非抽象类是某个抽象类的子类,则它必须重写父类的抽象方法并给出方法体(也可以继承这个abstract方 法); 4、不允许abstract和final同时修饰一个方法(理由...
  • java实例化一个抽象类对象

    千次阅读 2019-07-16 16:23:09
    不对啊,根据我的知识一个抽象类不能直接实例化一个对象出来,面向对象期末考试的卷子还有专门一道让你改错的题,一般抽象类直接实例化对象都是每年必考的错误点。那这个对象从哪实例化,国家分配的吗?先不管,结果...
  • •接口的方法默认是 public,所有方法在接口中不能有实现(Java 8 开始接口方法可以有默认实现),而抽象类可以有非抽象的方法。 •接口中的实例变量默认是 final 类型的,而抽象类中则不一定。 •一个类可以实现多...
  • Java 抽象类

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

    千次阅读 2019-01-29 16:30:36
    抽象类的概念 Java中允许在类中只声明方法而提供方法的实现。这种只有声明而没有方法体的方法成为抽象方法,而包含一个或者多个抽象方法的类称为抽象类。 抽象方法是通过指定abstract关键字来创建。抽象方法没有...
  • 关于抽象类无法实例化,但是可以使用"new"来实例的疑问. 背景:昨天下午回答一个实习生问的问题,大致的经过是这样的: 他问的:“为什么抽象类无法实例化,但是可以new出来一个实例,官方这么说是什么意思?而且去了各类...
  • 接口和抽象类可以被new嘛?——顺便总结内部类

    万次阅读 多人点赞 2015-08-04 21:04:13
    听到这个问题,我的第一反应是肯定不行啊,直接对接口和抽象类调用new,编译器都过去。但是他说,考官说可以,用匿名内部类实现。听见这个回到,我感觉那个考官太…………,有点无语。我们可以仔细分析下这个问题...
  • 这种情况搞懂,创建对象成功了,是只要把抽象方法给具现化了就创建吗? ``` abstract class Driver { public abstract void drive(); } public class Test { public static void main(String[] args) ...
  • Java笔试面试-抽象类与接口

    万次阅读 多人点赞 2019-09-15 22:29:50
      在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。简单来说,使用关键字 ...
  • 面向对象编程之继承、多态、封装、抽象类、接口、包继承类的继承格式为什么要继承继承的特点继承的种类及关键字访问权限多态向上转型动态绑定方法重写重写和重载的区别比较多态的优点封装实现Java的封装封装的优点...
  • 1.抽象类(abstract class) 1). 抽象方法和抽象类产生的背景 2). 抽象类的特点 3). 特殊的抽象类 (没有抽象方法) 4). 多个类的功能向上抽取之后,如何确定方法是否该是抽象的 3.接口(interface) 1). 接口中成员...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 585,060
精华内容 234,024
关键字:

抽象类能不能new对象