精华内容
下载资源
问答
  • 抽象类怎样实例化
    2022-06-02 21:36:05

    转自:

    java如何实例化抽象类呢?

    我们都知道抽象类是不可以实例化,但是今天领导让我编写代码,实现抽象类的实例化,那么我该怎么处理这一需求呢?

    实例化简介:

        实例化是指在面向对象的编程中,把用类创建对象的过程称为实例化。是将一个抽象的概念类,具体到该类实物的过程。实例化过程中一般由类名 对象名 = new 类名(参数1,参数2...参数n)构成。

    抽象类:

       常用于表示对问题领域进行分析、设计中得出的抽象概念   对一系列看上去不同,但是本质上相同的具体概念的抽象,在java中,包含抽象方法的类称之为“抽象类”,抽象类不能直接生成对象,

      如果你一定要实例化抽象类,你可以采用匿名类的方式生成抽象类 

    下文笔者讲述java代码实例化抽象类的方法分享,如下所示

    实现思路:
        我们可以使用创建匿名类的方式
        实现实例化抽象类
    
    例:实例化抽象类
    

           我们采用匿名内部类的方法,即可实现实例化抽象类的效果

          如:new 抽象类的类名,重写里面的方法,即可实现抽象类的实例化

    package com.java265.other;
    public class Test17 {
        /**
         * java265.com 示例程序
         * @throws Exception
         * @throws
         */
        public static void main(String[] args) {
            Test17A t = new Test17A() {
                @Override
                public    void testFun() {
                    System.out.println("println运行中。。。。");
                };
            };
    
            t.testFun();
        }
    }
    
    abstract class Test17A {
        abstract void testFun();
    }
    
    -----运行以上代码,将输出以下信息------
    println运行中。。。。

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

    2021-04-04 12:18:52
    检查调用约定,参数等。 一切都必须与预期的方法签名相匹配。
  • 抽象类实例化

    千次阅读 2021-02-12 14:14:53
    这个问题我想了一个晚上,看了好几篇别人的博客,但结果都各不相同,每个人有每个人的理解,后来我想明白了:抽象类不能直接通过new去实例化一个对象,那它就是不能实例化,要获取抽象类的对象, 需要先用一个类继承...

    抽象类能实例化吗?

    这个问题我想了一个晚上,看了好几篇别人的博客,但结果都各不相同,每个人有每个人的理解,后来我想明白了:

    抽象类不能直接通过new去实例化一个对象,那它就是不能实例化,要获取抽象类的对象, 需要先用一个类继承抽象类,  然后去实例化子类。也可以用匿名内部类,在抽象类中创建一个匿名的子类,继承抽象类,通过特殊的语法实例化子类的对象 。(后面会细说)

    现在重点来了,要研究这个问题,前提是你要了解抽象类,万变不离其宗,我们从抽象类的根源谈起 , 深化对抽象类的理解。

    首先看这个例子:

    package com.my.animal;//动物类

    public classAnimal {

    String name;//名字

    String color;//颜色

    publicAnimal(String name,String color){this.name =name;this.color =color;

    }public voidrun(){

    System.out.println(name+"四条腿跑的很快!!!");

    }

    }//狗类继承动物类

    classDog extends Animal{publicDog(String name,String color){

    super(name,color);

    }

    }//鱼类继承动物类

    classFish extends Animal{publicFish(String name, String color) {

    super(name, color);

    }

    }classTest{public static voidmain(String[] args) {

    Dog dog= new Dog("哈巴狗","白色");

    dog.run();

    Fish fish= new Fish("锦鲤","红色");

    fish.run();

    }

    }

    运行结果:

    哈巴狗四条腿跑的很快!!!

    锦鲤四条腿跑的很快!!!

    是不是发现问题了,鱼怎么能用腿跑呢,难道是原始鱼?哈哈,开玩笑的,这个问题如何解决,估计大家马上想到了,在子类中重写父类的run方法不就行了,对,确实这样就可以解决,但是大家想过没有,我们是如何发现这个问题的?是不是编译运行之后才看到的,当然,也有大佬能不编译运行就能看到,不抬杠啊,意思是说有发现不了这个问题的风险,对别人可能无所谓,但对我们程序员来说,这种低级错误还是不犯的好,程序员应该有更高的追求,岂能在这被绊倒,我们要把这种风险降为零,那该如何做呢?不急,心急吃不了热豆腐,且看我慢慢分析:

    目前存在的问题:

    1.动物类的run方法描述的不正确

    2.没有强制要子类一定要重写父类的run方法

    解决方案:(抽象类的应用场景)

    我们在描述一类事物的时候,发现该种事物确实存在着某种行为,但是这种行为目前是不具体的,那么我们可以抽取这种行为的声明,但是不去实现该种行为,这时候这种行为我们称作为抽象的行为,我们就需要使用抽象类

    先看下面的例子:

    package com.my.animal;//动物类(抽象类)

    public abstract classAnimal {

    String name;//名字

    String color;//颜色//构造方法

    publicAnimal(String name,String color){this.name =name;this.color =color;

    }

    //非抽象方法

    public void eat(){

    System.out.println(name+"吃东西!!!");

    }//抽象方法

    public abstract voidrun();

    }classDog extends Animal{publicDog(String name,String color){

    super(name,color);

    }

    @Overridepublic voidrun() {

    System.out.println(name+"四条腿跑得快!!");

    }

    }classFish extends Animal{publicFish(String name, String color) {

    super(name, color);

    }

    @Overridepublic voidrun() {

    System.out.println(name+"摇摇尾巴游啊游!!");

    }

    }classTest{public static voidmain(String[] args) {

    Dog dog= new Dog("哈巴狗","白色");

    dog.run();

    Fish fish= new Fish("锦鲤","红色");

    fish.run();

    }

    }

    运行结果:

    哈巴狗四条腿跑得快!!

    锦鲤摇摇尾巴游啊游!!

    这个问题解决了,那还有一个问题就是:抽象类能实例化对象吗?

    看这个例子就知道了:

    public abstract classAnimal {

    String name;

    String color;publicAnimal(String name,String color){this.name =name;this.color =color;

    }public abstract voidrun();

    }classTest{public static voidmain(String[] args) {

    Animal a= newAnimal();

    a.run();

    }

    }

    运行结果:

    Error:(45, 20) java: com.my.animal.Animal是抽象的; 无法实例化

    抽象类注意的细节:

    1.如果一个函数没有方法体,那么该函数必须要使用abstract修饰,把该函数修饰成抽象的函数。

    2.如果一个类出现了抽象的函数,那么该类也必须使用abstract修饰。

    3.如果一个非抽象类继承了抽象类,那么必须要把抽象类的所有抽象方法全部实现。

    4.抽象类可以存在抽象方法,也可以存在非抽象方法,还可以不存在抽象方法,但是这样没任何意义,Java是不写废话的。

    5.抽象类是不能实例化对象的

    6.抽象类是存在构造函数的,其构造函数是提供给子类创建对象的时候初始化父类的属性的。

    疑问:为什么抽象类不能实例化对象?

    因为抽象类是存在抽象方法的,如果能让抽象类创建对象的话,那么使用抽象类的对象调用抽象方法是没有任何意义的。

    疑问排解了,故事结束了?不,学海本无底,我们来点扩展,就是开头提到的如何用匿名内部类去实例化子类对象。

    看下面的例子:

    package Practice_Anything;public abstract classJava_Abstract2 {public voida(){

    System.out.println("我是抽象类中的一个非抽象方法");

    }public staticJava_Abstract2 newIntences(){return newJava_Abstract2(){

    };

    }

    }classTest2{public static voidmain(String[] args) {

    Java_Abstract2 java_abstract2=Java_Abstract2.newIntences();

    java_abstract2.a();

    }

    }

    运行结果:

    我是抽象类中的一个非抽象方法

    这个故事到这就结束了,但是学习还没有停止,比如接口也是一种抽象类型,是抽象方法的集合,由此,我们是不是该联想到学习接口了呢?哈哈,学海本无底,前行莫彷徨!

    此篇为本人原创,花了大概半天时间,找了不知多少相关资料整合而成,如若对你有用,记得推荐,如若哪有不当,感谢指正!

    本文已独家授权给脚本之家(jb51net)公众号独家发布

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

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

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

    展开全文
  • 第8章 抽象类与接口 陶俊 内容大纲 抽象类 修改器与访问器 接口实现 类的多重继承 接口继承 西北大学公共管理学院 陶俊 1 引言 可根据抽象类派生出新的子类再由子类来创建对象 java接口是提升面向对象编程扩展性而...
  • 抽象类实例化

    2021-02-28 19:03:10
    在Java中抽象类真的不能实例化么?在学习的过程中,发现了一个问题,抽象类在没有实现所有的抽象方法前是不可以通过new来构建该对象的,但是抽象方法却是可以有自己的构造方法的。这样就把我搞糊涂了,既然有构造...

    在Java中抽象类真的不能实例化么?

    在学习的过程中,发现了一个问题,抽象类在没有实现所有的抽象方法前是不可以通过new来构建该对象的,但是抽象方法却是可以有自己的构造方法的。这样就把我搞糊涂了,既然有构造方法,又不可以通过new来创建,那么抽象类在没变成具体类的时候究竟可不可以实例化呢?

    通过上网查找资料、引用:blog.sina.com.cn/s/blog_7ffb8dd5010120oe.html

    抽象类其实是可以实例化的,但是他的实例化方式不是通过new方式来创建对象,而是通过父类的引用来指向子类的实例来间接地实现父类的实例化(因为子类要实例化前,一定会先实例化他的父类。这样创建了继承抽象类的子类的对象,也就把其父类(抽象类)给实例化了).但是:接口是不能被实例化的(接口压根就没有构造函数)。

    代码如下:

    48304ba5e6f9fe08f3fa1abda7d326ab.png

    abstract class B {

    private String str;

    public B(String a) {

    System.out.println("父类已经实例化");

    this.str=a;

    System.out.println(str);

    }

    public abstract void play();

    }

    public class A extends B{

    public A(String a) {

    super(a);

    System.out.println("子类已经实例化");

    }

    @Override

    public void play() {

    System.out.println("我实现了父类的方法");

    }

    public static void main(String[] args) {

    B aa=new A("a");

    }

    }

    48304ba5e6f9fe08f3fa1abda7d326ab.png

    结果如下:

    父类已经实例化

    a

    子类已经实例化

    另外:

    Calendar中的getInstance()

    Calendar Cal =  Calendar.getInstance();

    Calendar是抽象类不能直接通过new对象,但是提供的静态getInstance()就是给Calendar创建对象。

    从Calendar.getInstance() 中所获得的实例其实就是一个 "GreogrianCalendar" 对象

    GreogrianCalendar就是Calendar的子类,他实现了Calendar里面的抽象方法。过父类的引用来指向子类的实例来间接地实现父类的实例化。同时,使用getInstance()有诸多好处:

    1。 new 一定要生成一个新对象,分配内存;getInstance()则不一定要再次创建,它可以把一个已存在的引用给你使用,这在效能上优于new;

    2。new创建后只能当次使用,而getInstance()可以跨栈区域使用,或者远程跨区域使用。所以getInstance()通常是创建static静态实例方法的。

    展开全文
  • 如何实现抽象类实例化

    千次阅读 2018-11-01 12:05:06
    正常情况下抽象类是不能实例化的,但可以模拟实例化,即 利用匿名内部类可以实现抽象类的,举例如下: 1、需要实例化抽象类 代码如下: public abstract class AbstractFruit { private String name; ...
  • Java关于抽象类能否被实例化的问题

    千次阅读 2021-02-27 12:43:48
    我对抽象类能否被实例化产生疑问始于我看到一句话说:子类实例化会先实例化父类。而且,自己也知道,抽象类作为父类,其子类是能调用他的属性和已实现方法的。这证明抽象父类在内存是有一定空间的。(百度百科说:...
  • 纯虚无法实例化: class ABC { public: using Ptr = std::unique_ptr<ABC>; ABC() = default; ~ABC() = default; virtual void func1() = 0; virtual void func2() = 0; virtual void func3() = 0...
  • 抽象类应该是没有意义的东西,如果它完全存在于自己.以车辆为例.您是否可以在不同时描述特定类型的车辆的情况下描述车辆?否 – 因为车辆只是描述一组相关对象的共同特征和行为的一种方式.或者,您可以将它们视为概念....
  • 最近在重新回顾JavaSE部分的知识,在学习抽象类的时候,我们都知道抽象类是不可实例化话的,当时不知道怎么的就将下面的部分敲出来了,这样就让我产生了疑问?
  • 抽象类实例化方法

    千次阅读 2018-10-31 22:00:30
    抽象类实例化方法 抽象类可以有自己的构造方法,但是不能直接通过new进行实例化。但是可以通过子类继承,实例化子类的时候抽象类也会被实例化。 ...
  • 在Java中抽象类真的不能实例化么?在学习的过程中,发现了一个问题,抽象类在没有实现所有的抽象方法前是不可以通过new来构建该对象的,但是抽象方法却是可以有自己的构造方法的。这样就把我搞糊涂了,既然有构造...
  • 抽象类不能实例化

    2021-01-26 16:08:53
    抽象类的确不能实例化抽象类在没有实现所有的抽象方法前是不可以通过new来构建该对象的。 但是往往人们会被以下这种格式 //匿名内部类 new TestAbs(){ 要重写的抽象方法 } 实际上是实例化一个它的子类。其实...
  • Java抽象类为什么能实例化

    千次阅读 2022-03-13 15:27:19
    在学习Java网络编程的时候...很显然OutputStream是一个抽象类,则=右边应该是OutputStream的一个子类。然而socket.getOutoutStream()返回类型也是OutputStream类型的。这一看似不符合语法要求的写法其实是没有问题的。
  • 抽象类可以实例化吗?

    千次阅读 2019-08-15 16:07:59
    抽象类可以有自己的构造方法,但是不能直接通过new进行实例化。但是可以通过子类继承,实例化子类的时候抽象类也会被实例化。这其实用到了多态,向上转型。父类引用指向子类对象~ ...
  • 今天无意中看到一个问题:为什么抽象类不能实例化? 很多人的答案都是再说使用抽象类的好处,但是并没有回答为什么不能实例化?这个过程就像是在回答:为什么公鸡不能下蛋?然后回答是使用公鸡可以打鸣。 按照我的...
  • java 接口及抽象类实例化

    千次阅读 2019-02-21 17:32:55
    我们通常被告知java的接口和抽象类都是不能被实例化的。但在实际代码中,你是否见过类似以下的奇怪代码: public static void main(String[] args) { Frame frame = new Frame("kroseing"); frame....
  • 之前上课老师有问到过:“为什么抽象类不能被实例化?” 我也看了很多大佬们的帖子,都写得很好很棒!但是有一些说法我个人可能觉得有点问题: 比如:第一个观点:" 什么是抽象类? 抽象:就是不具体的意思。 ...
  • 关于抽象类无法实例化,但是可以使用"new"来实例的疑问. 背景:昨天下午回答一个实习生问的问题,大致的经过是这样的: 他问的:“为什么抽象类无法实例化,但是可以new出来一个实例,官方这么说是什么意思?而且去了各类...
  • Java 抽象类能否被实例化问题

    千次阅读 2018-11-27 16:15:03
    废话不多说 父类Fruit public abstract class Fruit { public String color; //定义一个抽象的方法 public abstract void...Fruit2 抽象类继承 Fruit类 public abstract class Fruit2 extends Fruit { @Overrid...
  • Java的抽象类实例化

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

    千次阅读 2020-05-13 00:54:23
    1、抽象类可以不包括抽象方法,它反正不会去实例化抽象类不能被实例化,也就是不能用new关键字去产生对象,抽象方法只需声明,而不需实现,抽象类的子类必须覆盖所有的抽象方法后才能被实例化,否则这个子类还是...
  • 大家都知道空类可以实例化一个对象并且,其大小为一个字节,抽象类不可以实例化一个对象,但是关于抽象类并没有说明为什么其不可以实例化。 1. 空类 即定义了一个类但是在其中没有定义成员变量和函数,仅仅是写了一...
  • Q:抽象类中一定有构造器,为什么不能实例化? A: ① 抽象类中的构造器是用来子类实例化的时候调用的,子类要加载父类的属性和方法。(不能因为是抽象类就和继承相矛盾) public class Demo01Test { @Test public...
  • 抽象类是不能被实例化的,抽象必须被继承,也就是只能实例化抽象类的子类。但是Java中有一段有趣的功能。比如:public abstract class MyAbstractclass {}MyAbstractclass是一个抽象类。可以在Main方法中实例化这个...
  • “不能实例化抽象类”错误

    千次阅读 2021-12-07 21:29:03
    对于“不能实例化抽象类”编译错误,主要基本是子类继承于抽象类,然后有某个抽象函数没有实现导致: 例如,抽象类A class A{ public: A(); virtual test() const = 0; } 子类B继承A class B : public A{ public:...
  • 在学习的过程中,发现了一个问题,抽象类在没有实现所有的抽象...抽象类其实是可以实例化的,但是他的实例化方式不是通过new方式来创建对象,而是通过父类的引用来指向子类的实例来间接地实现父类的实例化(因为子类

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 561,502
精华内容 224,600
关键字:

抽象类怎样实例化