精华内容
下载资源
问答
  • 今天问到抽象类要不要有构造函数的时候, 我随口一答应该是没有的, 我以为, 抽象类是不能直接用new来被实例化的, 所以也就不需要再去写构造函数了; 随后查了一下明白: 抽象类也需要构造函数, 在大多数情况中抽象类...

    今天被问到抽象类要不要有构造函数的时候, 我随口一答应该是没有的, 我以为, 抽象类是不能直接用new来被实例化的, 所以也就不需要再去写构造函数了;

    随后查了一下明白:
    抽象类也需要构造函数, 在大多数情况中抽象类往往是要被继承的, 在子类的构造函数中往往会调用父类的构造函数, 在这种情况下就需要父类(抽象类)来提供构造函数来调用super了, 当然如果没有提供的话就会调用默认的构造函数了- -

    抽象类能否被实例化呢?
    抽象类是不能以直接的方式去new来实例化的, 但是在子类中调用super的父类构造器的时候其实已经隐式地实例化出了一个抽象类的实例, 所以应该说抽象类也是可以被抽象化的;

    展开全文
  • public class TestClass { private InterfaceA a = new InterfaceA() { @Override public void testA() { ...//成员匿名,例如在Android开发中常用的Handler。 public static void main(St...

    先回答:抽象类和接口都是不能被实例化的!

    匿名类,正顾名思义,在java中没有名字标识的类,当然编译后还是会安排一个名字的,其名称由Java编译器给出,一般是形如:外部类名称+$+匿名类顺序,没有名称也就是其他地方就不能引用,不能实例化,只用一次,当然也就不能有构造器。

    Java语言规范是这么描述匿名类的:

    匿名类的声明是由java编译器自动派生自一个类实例创建表达式

    匿名类永远不能是抽象的。

    匿名类总是隐式的final。

    匿名类总是一个内部类;并且不能是static的。

    实际使用中该注意什么?

          1、使用匿名内部类时,我们必须是继承一个类或者实现一个接口,但是两者不可兼得,同时也只能继承一个类或者实现一个接口。
          2、匿名内部类中是不能定义构造函数的。
          3、匿名内部类中不能存在任何的静态成员变量和静态方法。
          4、匿名内部类为局部内部类,所以局部内部类的所有限制同样对匿名内部类生效。

          5、匿名内部类不能是抽象的,它必须要实现继承的类或者实现的接口的所有抽象方法。

    匿名类的命名规则:

    1.内部类的class文件命名是:主类+$+内部类名

    2.匿名类的class文件命名是:主类+$+(1,2,3....)

    匿名类不能使用任何关键字和访问控制符,匿名类和局部类访问规则一样,只不过内部类显式的定义了一个类,然后通过new的方式创建这个局部类实例,而匿名类直接new一个类实例,没有定义这个类。匿名类最常见的方式就是回调模式的使用,通过默认实现一个接口创建一个匿名类然后,然后new这个匿名类的实例。

    匿名类的体现形式:

    为了分类说明,先定义三个类(接口,抽象类,非抽象类)

      
    public interface InterfaceA {
        void testA();
    }
    
    
    public abstract class AbstractB {
        abstract void abstractMethod();
    
        public void test() {
            System.out.println("我是抽象类中的非抽象方法");
        }
    }
    public class ClassC {
    
    
        public void methodC() {
    
        }
    }
    public class TestClass {
        private InterfaceA a = new InterfaceA() {
            @Override
            public void testA() {
    
            }
        };//成员匿名类,例如在Android开发中常用的Handler
        public static void main(String[] args) {
    
            AbstractB b = new AbstractB() {
                @Override
                void abstractMethod() {
                }
            };//局部匿名类
            //以上两种是通过实现接口实现匿名类,称为接口式匿名类,也可以通过继承类
            /**
             * 此处 b 抽象类AbstractB ” 的实例化对象吗?当然不是!
             * 哲学上讲 进化不完全的物种是不能存在的,抽象类就是那种没有进化完全的,是不能被实例化的。
             * b是抽象类的子类(实现类)的一个实例。
             * 只不过定义该子类的同时直接实例化了一个该子类的对象,并且指向了父类的引用。
             */
            ClassC c = new ClassC() {
    
            };//继承匿名类,注意ClassC是一个非抽象类
    
            //还可以是位于参数列表的位置
            new Thread(new Runnable() {
                @Override
                public void run() {
                    System.out.println("My Class name : " + this.getClass().toString());
                }
            }).start();//属于局部匿名类一种
        }
    }

    打印结果:


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

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

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

    展开全文
  • 关于为什么抽象类可以被实例化

    千次阅读 2018-04-26 20:17:11
    个人想法为什么抽象类可以被实例化?首先有2个设定在:含有抽象类的方法必须被定义为抽象类。抽象方法是不能被调用的。虽然抽象类中不一定有抽象方法,但一旦有抽象方法时,就可以通过点方法调用,导致1、2两个...

    个人想法

    为什么抽象类不可以被实例化?首先有2个设定在:

    1. 含有抽象类的方法必须被定义为抽象类。
    2. 抽象方法是不能被调用的。
    虽然抽象类中不一定有抽象方法,但一旦有抽象方法时,就可以通过点方法调用,导致1、2两个设定相悖。所以抽象类不可以被实例化。


    展开全文
  • 抽象类是否可以实例化讨论

    千次阅读 2018-04-14 14:59:11
    Answer:(1)、首先,抽象类是不可以实例化的,但只是不可以传统做法中的通过new来进行实例化,而是通过父类的应用来指向子类实例间接地实现父类的实例化,因为子类在实例化之前,一定会优先实例化它的父类。...
  • 抽象类通过子类被实例化

    千次阅读 2019-12-03 13:50:00
    抽象类其实是可以被实例化的,但是它的实例化方式并不是通过普通的new方式来创建对象,而是通过父类的应用来指向子类的实例间接地实现父类的实例化,因为子类在实例化之前,一定会先实例化它的父类。这样创建了继承...
  • Java关于抽象类能否被实例化的问题

    千次阅读 2013-06-25 21:16:14
    首先明确地说:抽象类不能被实例化。 我对抽象类能否被实例化产生疑问始于我看到一句话说:子类实例化会先实例化父类。而且,自己也知道,抽象类作为父类,其子类是能调用他的属性和已实现方法的。这证明抽象父类在...
  • 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...
  • 抽象类实例化方法

    千次阅读 2018-10-31 22:00:30
    抽象类实例化方法 抽象类可以有自己的构造方法,但是不能直接通过new进行实例化。但是可以通过子类继承,实例化子类的时候抽象类也会被实例化。 ...
  • 抽象类可以实例化吗?

    万次阅读 多人点赞 2018-11-01 15:29:45
    抽象类可以有自己的构造方法,但是不能直接通过new进行实例化。但是可以通过子类继承,实例化子类的时候抽象类也会被实例化。这其实用到了多态,向上转型。父类引用指向子类对象~ ...
  • 抽象类无法直接实例化,它的实例化方式并不是通过...注意:接口与抽象类非常类似,但是它不可以被实例化,因为接口压根没有构造函数。下面将通过一个简单的Demo来展示一下:首先,定义一个抽象类B,包含抽象方法pl...
  • 抽象类可以实例化,为什么可以创建数组对象,标注长度,然后向上造型呢
  • 验证抽象类是否可以在子类未实例化时调用子类实现的抽象方法; 验证java的多态性 实例抽象类:package com.secbro.test.abstractInit;/** * @author zhuzhisheng * @Description * @date on 2016/5/28. */ ...
  • 抽象类真的也可以被实例化(Java)

    万次阅读 热门讨论 2017-09-16 16:24:05
    抽象类实例化
  • 构造器不就是为了初始化对象而存在的吗 既然抽象类不能被实例化 那为什么 还要按个构造器 ?
  • PHP抽象类:无法实例化

    千次阅读 2016-08-11 16:18:04
    一、抽象类: 无法实例化 类前加 abstract, 此类就成为抽象类,无法实例化. 举例: 春秋战国时期,燕零七 飞行器专家,能工巧匠.他写了一份图纸---【飞行器制造术】 飞行器秘制图谱: 要有一个有力的发动机,...
  • 接口是我们常用的,抽象类好像并不是怎么常用,但这并不代表他不重要,他可以被继承,可以有构造方法,可以给类中的成员变量赋初值,接口就没有这样的功能。       抽象类的出现使得...
  • 抽象类不能被实例化

    千次阅读 2018-09-19 21:40:14
    /** * */ package test919; public abstract class Animal { private String name; public Animal(String name) { super(); this.name = name; } public abstract void enjoy();...package t...
  • java抽象类实例化

    千次阅读 2018-10-01 15:51:53
    简单的讲抽象类肯定是可以被实例化的,不过不是通过通常的 new方法来实现的,我们都知道抽象类必须被继承,且子类必须覆写父类中全部的抽象方法,但我们都知道在java中实例化子类的同时父类也必须被实例化,由此可知...
  • 首先我们知道,一个类如果是抽象类,我们就不能用这个类实例化一个对象。什么样的类是抽象类呢? C++没有C Sharp中的关键字abstract,但是当一个类中有一个或多个纯虚函数的时候,这个类就自动成为了抽象类,即不...
  • 抽象类可以没有抽象方法,不能被实例化
  • 关于抽象类不能实例化的问题

    千次阅读 2018-03-31 13:03:03
    抽象类不能实例化;当遇见这种错误,先查看是哪个类导致的该错误;查看该类的继承关系;可以从最新添加的继承关系查起;找到纯虚函数即可;将纯虚函数在该类中重定义即可解决;结合我的错误时,父类中有纯虚函数:...
  • Java抽象类为什么不能被实例化

    千次阅读 2020-07-08 22:25:23
    在理解抽象类为什么不能被实例化之前,首先我们要了解以下几个问题。 问题一:什么是抽象类抽象类是Java中一种特殊的类,该类使用了abstract关键字进行修饰,该类允许有普通方法和抽象方法,该类不能够进行实例...
  • 抽象类不能进行实例化吗?

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

    千次阅读 2011-08-18 16:09:18
    1.为抽象类实例化 abstract class A{ // 定义抽象类A public abstract void print() ; // 定义抽象方法print() }; class B extends A { // 定义子类,继承抽象类 public void
  • 抽象类是不能实例化的。但可以通过继承实现其抽象方法,然后创建实例或者可以创建匿名类来使用。
  • JAVA中抽象类不能实例化,但是却可以写构造方法,为什么呢?  首先第一点:构造方法不能实例化,想象一下,如果可以实例化,那么,实例化的是所有的子类还是具体哪一个?  第二点:为什么可以有构造方法?  看...
  • java 接口及抽象类实例化

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

    千次阅读 多人点赞 2019-12-04 21:54:39
    今天无意中看到一个问题:为什么抽象类不能实例化? 很多人的答案都是再说使用抽象类的好处,但是并没有回答为什么不能实例化?这个过程就像是在回答:为什么公鸡不能下蛋?然后回答是使用公鸡可以打鸣。 按照我的...
  • 关于抽象类无法实例化,但是可以使用"new"来实例的疑问. 背景:昨天下午回答一个实习生问的问题,大致的经过是这样的: 他问的:“为什么抽象类无法实例化,但是可以new出来一个实例,官方这么说是什么意思?而且去了各类...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 484,714
精华内容 193,885
关键字:

抽象类可以被实例化