精华内容
下载资源
问答
  • 大家都知道抽象类无法实例化,就无法创建对象...所以下面这篇文章主要给大家介绍了关于Java实例化一个抽象类对象的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。
  • java抽象类到底能不能够实例化

    千次阅读 2020-03-07 16:31:58
    抽象能不能实例化? 测试 创建一个AbstractFruit抽象类 public abstract class AbstractFruit { public AbstractFruit(){ System.out.println("我是Fruit的抽象类,我被实例化了"); } public abstract v...

    文章目录

    问题

    什么是抽象类?抽象类能不能被实例化?

    测试

    创建一个AbstractFruit抽象类

    public abstract class AbstractFruit {
        public AbstractFruit(){
            System.out.println("我是Fruit的抽象类,我被实例化了");
        }
        public abstract void say();
    }
    

    使用main方法进行测试

    public class Test {
        public static void main(String[] args) {
            AbstractFruit abstractFruit = new AbstractFruit();
        }
    }
    

    这段测试代码编译报错了,意思就是AbstractFruit是抽象的不能被实例化,也就是说无法通过new的方式实例化。
    编译报错
    那到底抽象类能不能实例化?我们写一个Orange继承AbstractFruit,代码如下:

    public class Orange extends AbstractFruit {
        public Orange() {
            System.out.println("我是Orange类,我被实例化了");
        }
        @Override
        public void say() {
            System.out.println("我是一个Orange");
        }
    }
    

    main方法测试

        public static void main(String[] args) {
            Orange orange = new Orange();
        }
    

    测试结果如下:

    我是Fruit的抽象类,我被实例化了
    我是Orange类,我被实例化了
    

    说明,子类Orange 实例化的时候把抽象类AbstractFruit也实例化了。
    那么还有其他方式实例化抽象类吗?答案是有。
    可以通过如下这种生成匿名类的方式去实现抽象类的构造。

        public static void main(String[] args) {
    //        Orange orange = new Orange();
            AbstractFruit abstractFruit = new AbstractFruit() {
                @Override
                public void say() {
                    System.out.println("大家好我是abstractFruit");
                }
            };
            abstractFruit.say();
        }
    

    打印结果如下:

    我是Fruit的抽象类,我被实例化了
    大家好我是abstractFruit
    

    总结

    什么是抽象类?
    答:由abstract修饰的类叫抽象类。抽象的抽去了子类的公有的方法或者属性。
    抽象类能不能被实例化?
    答:不能。抽象类不是具体的类,无法通过new的方式实例化,但是可以通过子类的构造方法间接实例化,也可以通过生成匿名类的方式来实现。

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

    千次阅读 2020-07-08 22:25:23
    抽象类是Java中一种特殊的类,该类使用了abstract关键字进行修饰,该类允许有普通方法抽象方法,该类能够进行实例化(这个在后面进行解释)因为抽象不能直接实例化,所以必须需要有实现子类。 问题二:为什么...

    问题背景

    在理解抽象类为什么不能被实例化之前,首先我们要了解以下几个问题。

    • 问题一:什么是抽象类?
      抽象类是Java中一种特殊的类,该类使用了abstract关键字进行修饰,该类允许有普通方法和抽象方法,该类不能够进行实例化(这个在后面进行解释)因为抽象类不能直接实例化,所以必须需要有实现子类。
    • 问题二:为什么要有抽象类?
      抽象类是介于接口与普通类之间的一种结构,接口中定义的都是抽象方法,而类中都是普通方法。当我们存在一类事物,他们大多数结构和功能存在雷同,只有少部分存在不同,如果我们直接使用子类实现接口,那么结构和功能相同部分的代码将会造成大量冗余,因此我们需要一种结构,里面可以提供一部分已经实现了的共同的代码,剩下的一小部分由具体子类去实现即可,达到了代码的重用。

    问题回答

    1.从Java规范来看:很简单直了,Java程序中规定了抽象类不能实例化。强行实例化就会报错。
    2.从功能角度来看:抽象类是一个结构和功能“不完整”的类,如果你让他强行“出生”的话,它可能会患有各种疾病,所以我们不能直接进行实例化,需要通过子类对结构和功能进行补全才能让它健康出生。
    3.从内存分配角度来看:抽象类只在分配了在栈中的引用,没有分配堆中的内存。程序都有一个代码段,在内存中需要占据一定的内存,而抽象类没有具体的实现方法,无法具体的给它分配内存空间,所以为了安全,不JAVA不允许抽象类,接口直接实例化。

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

    千次阅读 2019-08-29 09:30:16
    转载:java 抽象类为什么不能实例化? 我把CSDN论坛里面的一个帖子内容list到下面,自己看着理解,东家一言,西家一语,杂合起来,基本上也就理解了java中的抽象类为什么不能实例化了。 因篇幅有限,只能罗列...

    转载:java 抽象类为什么不能被实例化?

    我把CSDN论坛里面的一个帖子内容list到下面,自己看着理解,东家一言,西家一语,杂合起来,基本上也就理解了java中的抽象类为什么不能被实例化了。

    因篇幅有限,只能罗列部分留言

    以下内容不分先后顺序

    =====================================

    抽象类只在分配了在栈中的引用,没有分配堆中的内存。程序都有一个代码段,再内存中需要占据一定的内存,而抽象类没有具体的实现方法,无法具体的给它分配内存空间,所以为了安全,不JAVA不允许抽象类,接口直接实例化

    =====================================

    哲学角度,抽象基类往往在逻辑上无法实体化,比如说让别人去买水果,不说买什么,就说买水果,显然是买不到一种叫“水果”的东西的。

    =====================================

    主要是两点,一个是抽象类是一个不完整的类,一个是内存分配问题。
    实际上抽象类更多提供的是一个框架的功能,参数比接口更详细些。

    =====================================

    本末倒置了
    抽不抽象是设计时该考虑的问题,不能问为什么抽象类不能实例化
    因为在设计时,考虑到某些类所具备的信息不足以实例化一个对象,才设计成抽象的
    所以问题反过来就是答案:
    因为这个类不能够被实例化,所以才设计成抽象的,至于为什么这么做,问你的设计师吧,他也许会给出你答案
    不过设计师的脾气都不太好,给你一棒子叫你照着做就行了也是有可能的

    =====================================

    抽象类,就像是向别人声明:我能赚大钱
    实例化就是具体的行动
    因为抽象类只是个声明,而没有计划,也不知道怎么赚钱
    所以我们是不会投资给钱(内存)他的,就算投资他他也不能做任何事
    为了保存大家的利益,没有具休的赚钱计划不能让他执行

    =====================================

    不仅JAVA,其他任何语言都一样~这是由语言的设计决定了的,就是纯粹为了继承而存在

    =====================================

    抽象这个词已经很好的说明这一点了,我的理解是:对事物进行抽象通常是基于一定的经验,从众多的经验中总结出规律,浓缩的结果可以在以后多次获利,但是经验并不能真正帮你工作,你还是需要融入实践应用!

    =====================================

    学过汇编你会知道,程序都有一个代码段,再内存中需要占据一定的内存,而抽象类没有具体的实现方法,无法具体的给它分配内存空间,所以为了安全,不JAVA不允许抽象类,接口直接实例化

    =====================================

    面向对象思想是对现实社会的模拟(抽象),从哲学上讲进化不完全的物种是不能生存的!

    =====================================

    这是从设计思想层面的东西,为什么要纠结这个问题呢?
    说白一点,这就是java的使用规范.

    =====================================

    如果你是一个老板,你问一个应聘的人员:你会什么?他给你一个“我不知道”的答案,你会怎么做!!
    这个例子视乎能更现实的说明你的这个问题。面向对象语言是从现实中抽象出来的,它该符合正常的逻辑秩序。

    =====================================

    Java中是允许不含抽象方法的抽象类的,我认为应该是出于安全的考虑,编译器强制规定不允许抽象类产生对象!

    =====================================

    java里这么规定的,原因我个人认为是抽象类里有未实现的抽象方法,实例化时不能正常分配内存吧,而且调用这个方法时不是要出异常吗

    参考

    讨论一下:Java中的抽象类到底为何不能实例化?


    展开全文
  • 在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 抽象方法实例化

    千次阅读 2016-10-25 09:33:32
    抽象可以直接创建对象,表示抽象类本身不能实例化,即 抽象类 a = new 抽象类();这样写是错误的,但是抽象类可以声明对象,因为,抽象类的子类必须复写抽象类中的所有抽象方法,即抽象类的子类是可以直接...
  • 文章目录java的接口为什么不能实例化呢?总结: java的接口为什么不能实例化呢? 首先,我们需要明白实例化的含义。实例化实际意义是在jvm的堆中开辟出一块内存空间,比如Student s = new Student();此处声明Student...
  • 验证抽象类是否可以在子类未实例化时调用子类实现的抽象方法; 验证java的多态性 实例抽象类:package com.secbro.test.abstractInit;/** * @author zhuzhisheng * @Description * @date on 2016/5/28. */ ...
  • Java抽象实例化

    万次阅读 多人点赞 2018-03-19 14:35:37
    简介 《Java编程思想》书中定义...因为抽象类中含有无具体实现的方法,所以一般不能抽象类创建对象。 // 抽象类 public abstract class ClassName { // 抽象方法:只有声明,而没有具体的实现 abstract voi...
  • java 接口及抽象实例化

    千次阅读 2019-02-21 17:32:55
    我们通常被告知java的接口和抽象类都是不能实例化的。但在实际代码中,你是否见过类似以下的奇怪代码: public static void main(String[] args) { Frame frame = new Frame("kroseing"); frame....
  • 关于抽象不能实例化的问题

    千次阅读 2018-03-31 13:03:03
    抽象不能实例化;当遇见这种错误,先查看是哪个类导致的该错误;查看该类的继承关系;可以从最新添加的继承关系查起;找到纯虚函数即可;将纯虚函数在该类中重定义即可解决;结合我的错误时,父类中有纯虚函数:...
  • 今天被问到抽象类要不要有构造函数的时候, 我随口一答应该是没有的, 我以为, 抽象类是不能直接用new来被实例化的, 所以也就需要再去写构造函数了; 随后查了一下明白: 抽象类也需要构造函数, 在大多数情况中抽象类...
  • JAVA抽象不能实例化,但是却可以写构造方法,为什么呢?  首先第一点:构造方法不能实例化,想象一下,如果可以实例化,那么,实例化的是所有的子类还是具体哪一个?  第二点:为什么可以有构造方法?  看...
  • 构造器就是为了初始化对象而存在的吗 既然抽象不能实例化 那为什么 还要按个构造器 ?
  • java抽象实例化

    千次阅读 2018-10-01 15:51:53
    简单的讲抽象类肯定是可以被实例化的,不过不是通过通常的 new方法来实现的,我们都知道抽象类必须被继承,且子类必须覆写父类中全部的抽象方法,但我们都知道在java中实例化子类的同时父类也必须被实例化,由此可知...
  • 抽象类无法直接实例化,它的实例化方式并不是通过...注意:接口与抽象类非常类似,但是它可以被实例化,因为接口压根没有构造函数。下面将通过一个简单的Demo来展示一下:首先,定义一个抽象类B,包含抽象方法pl...
  • Java抽象类真的不能实例化么?  在学习的过程中,发现了一个问题,抽象类在没有实现所有的抽象方法前是可以通过new来构建该对象的,但是抽象方法却是可以有自己的构造方法的。这样就把我搞糊涂了,既然有...
  • Java 抽象类能否被实例化问题

    千次阅读 2018-11-27 16:15:03
    废话多说 父类Fruit public abstract class Fruit { ... //定义一个抽象方法 public abstract void harvest(); //收获 } Fruit2 抽象类继承 Fruit类 public abstract class Fruit2 extends Fruit { @Overrid...
  • 下午试了半天,发现不行,没法搞 即对含有抽象方法抽象实例化失败。 网上有这个资料:  抽象类就一定可以实例化吗?  呵呵,一定哦。。看下面的例子:  public abstract ...
  • 抽象类真的也可以被实例化Java

    万次阅读 多人点赞 2017-09-16 16:24:05
    抽象实例化
  • 抽象类是由abstract修饰的类,它不能实例化,但是它也是有构造方法的,只要是类就有构造方法抽象类如何变为“实体类”,这里所说的实体类就是可以new出对象的类,我知道只有一种方法,让一个普通类继承这个...
  • java实例化一个抽象类的对象

    千次阅读 2019-07-16 16:23:09
    不对啊,根据我的知识一个抽象不能直接实例化一个对象出来,面向对象期末考试的卷子还有专门一道让你改错的题,一般抽象类直接实例化对象都是每年必考的错误点。那这个对象从哪实例化,国家分配的吗?先不管,结果...
  • 大家都知道抽象不能实例化 例如有个抽象类A 内有一个抽象方法public abstract void test(); A a = new A();是不行的 但 A a = new A(){ public void test(){ } }; 就ok 看起来就是调用构造函数的时候顺便重写...
  • Java中接口及抽象类的实例化问题

    千次阅读 2017-09-20 13:21:32
    我们都知道抽象类是不能...抽象不能实例化的原因——程序都有一个代码段,在内存中需要占据一定的内存,而抽象类没有具体的实现方法,无法具体的给它分配内存空间,所以为了安全,java不允许抽象类,接口直接实例化
  • java abstract 关键字 抽象方法抽象类的使用详解

    千次阅读 多人点赞 2018-10-27 20:36:40
    java abstract class 抽象类的使用详解
  • 先回答:抽象类和接口都是不能实例化的! 匿名类,正顾名思义,在java中没有名字标识的类,当然编译后还是会安排一个名字的, 其名称由Java编译器给出,一般是形如:外部类名称+$+匿名类顺序,没有名称也就是其他...
  • 抽象能实例化

    千次阅读 2019-04-03 12:50:00
    抽象不能直接通过new去实例化一个对象,那它就是不能实例化,要获取抽象类的对象, 需要先用一个类继承抽象类, 然后去实例化子类。也可以用匿名内部类,在抽象类中创建一个匿名的子类,继承抽象类,通过特殊的...
  • 抽象类和接口都不能实例化

    千次阅读 2018-09-07 22:20:00
    接口没有构造方法,所以不能实例化抽象类有构造方法,但是不是用来实例化的,是用来初始化的。 java支持单继承,却可以实现多个接口。 抽象类可以定义普通成员变量而接口可以,但是抽象类和接口都可以定义静态...
  • Java基础知识面试题(2020最新版)

    万次阅读 多人点赞 2020-02-19 12:11:27
    文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的...
  • 关于抽象类无法实例化,但是可以使用"new"来实例的疑问. 背景:昨天下午回答一个实习生问的问题,大致的经过是这样的: 他问的:“为什么抽象类无法实例化,但是可以new出来一个实例,官方这么说是什么意思?而且去了各类...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 325,109
精华内容 130,043
关键字:

java抽象方法不能实例化

java 订阅