精华内容
下载资源
问答
  • 抽象类为什么不能被实例化?

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

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

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

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

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

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

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

    千次阅读 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 后面写的名称是这个匿名类所实现的接口或者父类,返回的是匿名类对象

    展开全文
  • 构造器就是为了初始化对象而存在的吗 既然抽象类不能被实例化 那为什么 还要按个构造器 ?
  • 接口是我们常用的,抽象类好像并不是怎么常用,但这并代表他重要,他可以继承,可以有构造方法,可以给类中的成员变量赋初值,接口就没有这样的功能。       抽象类的出现使得...

          接口是我们常用的,抽象类好像并不是怎么常用,但这并不代表他不重要,他可以被继承,可以有构造方法,可以给类中的成员变量赋初值,接口就没有这样的功能。
          抽象类的出现使得位于上层的类更具有通用性。从某种角度来看,祖先类更加具有通用性。
          普通类加abstract即为抽象类。抽象类不能够被实例化,也就是说我定义了一个抽象类public abstract class Person{...}类,这个person类不能被new;大家也都知道,在new的时候是调用了构造方法,既然抽象了不能够被new为什么还要有构造方法?世界之大,无奇不有,这个方法行不通我们就想另一种方法,我们可以通过new,可以通过set、get方法给成员属性赋值,我们还可以在子类中调用super()方法给父类赋初值,然后继承父类当中的属性,既然不能通过new来调用抽象类的构造方法,我们可以看到还可以通过子类的super()方法来调用抽象类的构造方法,并对其赋值,例如我编写了一个Student类,继承于抽象类Person,public class Student extents Person{...},Student类可以被实例化,要想对Person类中的某些成员方法赋初值,可以在Student类中调用super()方法,对抽象类的成员属性进项赋值,继承了抽象类的子类就可以对抽象类的一些属性进行赋值,并且可以继承抽象类已经赋值过的方法和属性。
          需要注意的是,还可以定义一个抽象类的对象变量,但是他只能引用非抽象类子类的对象。例如,Person p = new Stduent(“张三”,28);这里的p是一个抽象类Person的变量,Person引用了一个非抽象子类Student的实例。
          抽象类中可以没有抽象方法,但是有抽象方法的类一定是抽象类,在抽象类中的抽象方法可以只定义,空实现,但是实现了抽象类的子类必须要重写实现抽象类中的抽象方法。

    展开全文
  • 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{ }...
  • 接口和抽象类可以被new嘛?——顺便总结内部类

    万次阅读 多人点赞 2015-08-04 21:04:13
     最近有同事跟我说了他面试时遇到的问题,考官问:“接口和抽象类可以被new嘛?”。这可能不是考官的原话,但是据他表达考官大概就是这个意思了。听到这个问题,我的第一反应是肯定不行啊,直接对接口和抽象类调用...
  • 今天我们谈谈为什么抽象类能有静态的抽象方法以及static修饰的方法不能被重写可以被继承 1 static修饰的方法不能被重写可以被继承 我们知道static修饰的方法为静态方法,可以直接使用类名.方法名进行调用...
  • 抽象类

    千次阅读 多人点赞 2020-01-12 21:57:45
    抽象类一定有抽象方法,但是有抽象方法的类必须定义为抽象类 C.抽象类不能实例化 因为他不是具体的。 抽象类具有构造方法,但是不能实例化。构造方法的作用是什么?子类对父类数据进行初始化 D:抽象的的子类 a:...
  • 它们的语法区别:1)接口不能有构造方法,抽象类可以有。2)接口不能有方法体,抽象类可以有。3)接口不能有静态方法,抽象类可以有。4)在接口中凡是变量必须是public static final,而在抽象类中没有要求。 忽然...
  • Java抽象类 详解

    万次阅读 多人点赞 2016-10-05 00:06:35
    一、抽象类的基本概念普通类是一个完善的功能类,可以直接产生实例化对象,并且在普通类中可以包含有构造方法、普通方法、static方法、常量和变量等内容。而抽象类是指在普通类的结构里面增加抽象方法的组成部分。...
  •  最近有同事跟我说了他面试时遇到的问题,考官问:“接口和抽象类可以被new嘛?”。这可能不是考官的原话,但是据他表达考官大概就是这个意思了。听到这个问题,我的第一反应是肯定不行啊,直接对接口和抽象类调用...
  • 抽象类不能进行实例化吗?

    万次阅读 2017-07-26 10:55:44
    抽象类可以有自己的构造方法,但是不能直接通过new进行实例化。但是可以通过子类继承,实例化子类的时候抽象类也会实例化。
  • 什么抽象类什么是抽象方法?

    千次阅读 2019-03-06 21:09:42
    抽象类抽象类就是不能使用new方法进行实例化的类,即没有具体实例对象的类,抽象类有点类似于“模板”的作用,目的是根据其格式来创建和修改新的类,对象不能抽象类直接创建,只可以通过抽象类派生出新的子类,再...
  • 父类代码如下: public abstract class Animal { public float weight; public float height; public void practice() { //... // 在抽象类中,abstract 方法可以非abstract 方法调用, eat(); //但是直到a
  • 抽象类可以没有抽象方法,不能被实例化
  • 为什么呢? 因为我说动物,你知道我说的是什么动物吗?只有看到了具体的动物,你才知道,这是什么动物。所以说,动物本身并不是一个具体的事物 而是一个抽象的事物。只有真正的猫,狗才是具体的动物。同理,我们也...
  • 今天问到抽象类要不要有构造函数的时候, 我随口一答应该是没有的, 我以为, 抽象类不能直接用new实例化的, 所以也就需要再去写构造函数了; 随后查了一下明白: 抽象类也需要构造函数, 在大多数情况中抽象类...
  • 接口和抽象类的区别是什么? •接口的方法默认是 public,所有方法在接口中不能有实现(Java 8 开始接口方法可以有默认实现),而抽象类可以有非抽象的方法。 •接口中的实例变量默认是 final 类型的,而抽象类中则...
  • java-抽象类和继承抽象类

    万次阅读 2018-02-09 16:17:15
    抽象类不能直接实例化,需要创建一个指向自己的对象引用(其子类)来实例化 代码: public class Main { public static void main(String[] args) { /* People people = new People(); */ //错误 People p =...
  • (2)特点:抽象成员必须在抽象类中声明,但抽象类不要求必须包含抽象成员,抽象类只能当做基类使用,而不能直接实例化。抽象类的用途提供多个派生类可共享的基类的公共定义。 (3)举例: public abstract class ...
  • 提示错误 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\...
  • 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...
  • 抽象类:包含抽象方法的类称为抽象类。 抽象方法:只声明而未实现的方法称为...*抽象类不能声明对象,必须继承。 *抽象类中的抽象方法必须被子类全部覆写才能够使用。 如下: publicclassMain { pub

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 697,270
精华内容 278,908
关键字:

抽象类为什么不能被new