精华内容
下载资源
问答
  • 抽象类不能用new创建对象
    千次阅读
    2020-07-15 00:27:20

    什么是抽象类呢?

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

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

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

    更多相关内容
  • 抽象类为什么不能创建对象

    千次阅读 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 类型的
    展开全文
  • 1.抽象类为甚麽不能直接创建对象? 1.子类更具体,父类更抽象,直接创建父类对象本身没有意义。 2.如果创建的是父类对象再调用方法的时候,调用的父类中的方法,而非子类的方法,它违背了多态的这种思想和设计 3....

    1.抽象类为甚麽不能直接创建对象?

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

    可以间接
    抽象类可以声明对象,但是不能使用自身的构造方法创建对象,但是可以使用子类的构造方法进行创建。
    public abstract class A{}
    public class B extends A{}
    A a = new B();

    展开全文
  • 2.抽象类虽然有构造器但是抽象类不能创建对象。 抽象方法没有方法体,创建对象不能执行,所以不能创建对象抽象类的注意事项 抽象类不能创建对象,如果创建,编译无法通过而报错。只能创建其非抽象子类的对象。 ...

    问题答案

    1.抽象类作为类一定有构造器,而且抽象类必须有构造器。
    提供给子类创建对象调用父类构造器使用的。
    2.抽象类虽然有构造器但是抽象类不能创建对象。
    抽象方法没有方法体,创建对象不能执行,所以不能创建对象。

    抽象类的注意事项

    1. 抽象类不能创建对象,如果创建,编译无法通过而报错。只能创建其非抽象子类的对象。
      理解:假设创建了抽象类的对象,调用抽象的方法,而抽象方法没有具体的方法体,没有意义。

    2. 抽象类一定有而且是必须有构造器,是供子类创建对象时,初始化父类成员使用的。
      理解:子类的构造器中,有默认的super()需要访问父类构造器。

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

    4. 抽象类的子类,必须重写抽象父类中所有的抽象方法,否则子类也必须定义成抽象类。

    5. 抽象类存在的意义是为了被子类继承,抽象类体现的是模板思想。
      理解:抽象类中已经实现的是模板中确定的成员,抽象类不确定如何实现的定义成抽象方法,交给具体的子类去实现。

    接口和抽象类的区别理解

    接口的设计目的,是对类的行为进行约束(更准确的说是一种“有”约束,因为接口不能规定类不可以有什么行为),也就是提供一种机制,可以强制要求不同的类具有相同的行为。它只约束了行为的有无,但不对如何实现行为进行限制。
    而抽象类的设计目的,是代码复用当不同的类具有某些相同的行为(记为行为集合A),且其中一部分行为的实现方式一致时(A的非真子集,记为B),可以让这些类都派生于一个抽象类。在这个抽象类中实现了B,避免让所有的子类来实现B,这就达到了代码复用的目的。而A减B的部分,留给各个子类自己实现。正是因为A-B在这里没有实现,所以抽象类不允许实例化出来(否则当调用到A-B时,无法执行)。

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

    万次阅读 2017-03-06 14:35:21
    抽象类和接口都能创建对象,只是后边的new不能new他们自己,但可以new他们的实现类(必须是类,不能抽象类和接口), 人们使用抽象类和接口只是为了说明要干什么事,而让他们的实现类去根据自己的需要去实现这些...
  • 这种情况搞懂,创建对象成功了,是只要把抽象方法给具现化了就创建吗? ``` abstract class Driver { public abstract void drive(); } public class Test { public static void main(String[] args) ...
  • 大家都知道抽象类无法实例化,就无法创建对象。所以下面这篇文章主要给大家介绍了关于Java实例化一个抽象类对象的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧...
  • 抽象类为什么不能实例化(new

    千次阅读 2021-02-09 20:23:43
    抽象类为什么不能实例化(new) 答案是 规定。 第一点:回归问题最初, 我们为什么要实例化? 我们先逆向思维来考虑,从面向对象的思想来看: 我们需要完成实现一个功能,而功能中的方法,是由对象来调用的,因此...
  • 抽象类能否创建对象

    千次阅读 2020-07-16 20:06:40
    抽象类和接口都能创建对象,只是后边的new不能new他们自己,但可以new他们的实现类(必须是类,不能抽象类和接口), 人们使用抽象类和接口只是为了说明要干什么事,而让他们的实现类去根据自己的需要去实现这些...
  • 抽象类概述分析事物时, 发现了共性的内容,就出现向上抽取,但是如果父类 的方法功能与子类不同,那么这时就抽取方法主体,这样抽取出来的方法 就是抽象方法 什么是抽象类有抽象方法的类 抽象类和普通的父类有什么区别...
  • 关于抽象类无法实例化,但是可以使用"new"来实例的疑问. 背景:昨天下午回答一个实习生问的问题,大致的经过是这样的: 他问的:“为什么抽象类无法实例化,但是可以new出来一个实例,官方这么说是什么意思?而且去了各类...
  • 与对象,使用new关键字创建对象

    千次阅读 2021-03-25 22:07:58
    是一种抽象的数据类型,他是对某一事物整体描述/定义,但是并不能代表某一个具体的事物 例如:动物、植物、手机、电脑… Person、Pet、Car等,这些都是用来描述/定义某一具体的事物应该具备的特点和...
  • 前言首先声明,接口或者抽象类实例化一个对象可能的,错误的。接口、抽象类实现注意点Interface属性默认都是 public static final方法默认都是 public abstract都不用显示声明抽象类至少含有一个方法是...
  • Java-抽象类

    千次阅读 2021-02-26 09:29:41
    抽象类含有抽象方法的类就是抽象类1) 抽象方法:该方法有返回值,有参数,就是没有方法体,该方法没有方法实现2) 抽象方法的格式:abstract 返回值类型 方法名(参数列表);3) 抽象类需要靠子类来重写抽象方法,以...
  • 在c++和java中我们会定义很多类,但是我们会遇到在对类进行new实例化时会遇到“不能实例化抽象类”或者“抽象类不能实例化”,针对这个问题要首先理解两个内容“抽象类”和“实例化” 如果只是想单纯的理解,那么...
  • public static void main(String[] args){ method(new Student());//匿名对象 Worker worker=new Worker();...//非匿名的非匿名的对象 method1(new Worker());//非匿名的匿名的对象 ...
  • /* 抽象类和接口作为形式参数: ... //抽象类和接口虽然都不能直接创建对象,但是可以通过多态进行对象的创建... */ //************抽象类作为形式参数*********** abstract class Person { publi
  • 在java中,当创建一个子类...提个问题:如果当创建一个子类对象会先创建父类对象的话,那么如果父类是抽象类的话,那该抽象父类也会被实例化喽,这与抽象类不能实例化相互矛盾啊! package javase5; pub...
  • (2)抽象类只是用到一个类所具有的行为,不能单独通过创建对象使用.使用new是错误的.可以通过派生类来实现其函数成员的具体逻辑。 (3)抽象类中可以有抽象方法,也可以没有任何抽象方法.只要类中存在一个抽象...
  • 可以一个抽象类定义一个指向该类的指针,但是不能定义或声明对象。 这个中原因就是,定义一个类的对象是,编译器在编译时需要了解类的所有信息以便准确的为要实例化的对象分配内存;由此可见,定义一个类对象是要...
  • java快速入门学习 抽象类

    千次阅读 2021-02-28 13:11:33
    抽象类在定义类时,前面加上 abstract 关键字修饰的类叫抽象类抽象类中有抽象方法,这种方法是完整的,仅有声明而没有方法...那抽象类如何代码实现呢,它的规则如下: abstract 修饰符定义抽象类 abstra...
  • JAVA可以使用如下方法来创建基于接口的匿名实现类对象 new<接口名>(){ //重写方法 }; package hello2; /** * 创建匿名的接口实现类对象:临时创建了一个没有命名的接口实现 * 代码简约化 * */ ...
  • Java------抽象类不能被实例化

    千次阅读 2020-05-13 00:54:23
    public abstract class MyList extends AbstractList{ MyList(String a ){ } public static void main(String[] args) ... MyList myList = new MyList("") { @Override public Object get(int index) { return
  • 在C++里,有两种方法创建对象: 方法一: ClassName object(param); 这样就声明了一个ClassName类型的object对象,C++会为它分配足够的存放对象所有成员的存储空间。 注意:为节省存储空间,C++创建
  • 问题1: ...疑问:接口和抽象类new出来是个什么东西呢? 可以使用匿名类的方式new出来,但必须实现接口中的所有接口方法和抽象类中的所有抽象方法。 那么为什么按钮单机事件setOnClickListe...
  • Java抽象类不创建对象,但可以调用静态方法将建一个对象,利用多态创建子类对象上转成父类类型。 附代码: public abstract class Dog { private int age; private String sex; private String name; public int...
  • 主要介绍了Java中抽象类用法与注意点,结合实例形式详细分析了java抽象类的定义、使用及相关操作注意事项,需要的朋友可以参考下
  • 问个java关于抽象类基础的问题?抽象类不是不能实例化吗?怎么还能通过上转型创建抽象类对象?...但为什么下面这样写是合法的,不是抽象类不能被实例化对象吗? Flower flower = new Rose() flower.bloom();

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 520,333
精华内容 208,133
关键字:

抽象类不能用new创建对象

友情链接: ExportExcelUtils.zip