精华内容
下载资源
问答
  • 抽象类为什么不能创建对象

    千次阅读 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 类型的
    展开全文
  • 通常在编译语句中用abstract修饰的类是抽象类,含有抽象方法的类称为抽象类,同样不能生成对象抽象类是不完整的,只能用作基类,在面向对象方法中,抽象类主要用来进行类型隐藏,和充当全局变量的角色。 2.抽象...

    抽象是什么?

    1.抽象类的定义:

    抽象就是从多个事物中奖共性的,本质的内容抽取出来。
    通常在编译语句中用abstract修饰的类是抽象类,含有抽象方法的类称为抽象类,同样不能生成对象。
    抽象类是不完整的,只能用作基类,在面向对象方法中,抽象类主要用来进行类型隐藏,和充当全局变量的角色。

    2.抽象类的概念

    多个对象都具备相同的功能,但是该功能的具体实现细节又各不相同。
    那么我们对此相同功能进行抽取,只抽取功能定义,只有功能声明,这种方法称为抽象方法
    例:
    狗和猫均有 eat() 功能,但是具体吃的东西又不同,我们此时将 eat() 抽象出来

    abstract class animals{
    	public abstract void eat();
    }
    
    class dog extends animals{
    	public void eat(){
    		System.out.println("狗吃骨头");
    	}
    }
    
    class cat extends animals{
    	public void eat(){
    		System.out.println("猫吃鱼");
    	}
    }
    

    3. 抽象类的特点

    1. 抽象方法只能定义在抽象类中,抽象的方法和抽象的类必须由关键字abstract修饰。
    2. 抽象类之定义方法声明,不定义功能主题(方法内部的具体实现)
    3. 抽象类不可以被创建对象(下面进行解释)
    4. 抽象类只有子类继承了父类中的方法,并且对起哄的所有抽象方法进行重写,该子类才不是抽象类(若没有重写其当中的所有抽象方法,这个子类还是抽象类)

    为什么抽象类不能创建对象?

    1. 子类更具体,父类更抽象,直接创建父类对对象本身没有意义
    2. 如果创建的是父类对象在调用方法的时候,调用的父类中的方法,而并非子类的方法,他违背了多态的思想和设计
    3. 因为父类引用指向子类对象时,调用的方法是子类重写的方法
      一般父类中的描述不够具体
      并不是说抽象类的构造方法没有意义
      那么在创建子类对象时要先调用父类的方法

    与具体的类比较:

    1. 抽象类不能直接实例化,并且对抽象类使用new运算符会导致编译时错误。(虽然一些变量和值在编译时的类型可以是抽象的,但是其值必须为null,或者含有对非抽象类的实例的引用)
    2. 允许抽象类包含抽象成员
    3. 抽象类不能被密封

    与接口比较:

    相同点:
    不能实例化对象,包含未实现的方法声明、派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅仅是方法包括其他成员)
    不同点:

    1. 可以实现很多个接口,但只能继承一个抽象类(解决多重继承)
    2. 抽象类当中可以存在非抽象的方法,可接口不能(它里面的方法只是一个声明,必须用public来修饰没有具体实现的方法)
    3. 抽象类中的成员变量可以被不同的修饰符来修饰,可接口中的成员变量默认的都是静态常量。
    4. 抽象类是对象的抽象,然而接口是一种行为规范。
    5. 接口只能做方法声明,抽象类中可以作方法声明,也可以作方法实现。
    6. 接口是设计的结果,抽象类是重构的结果
    7. 抽象类和接口都是用来抽象具体对象的,但是接口的抽象级别较高
    8. 抽象类主要用来抽象类别,接口主要用来抽象功能

    简单来说,抽象类就是作为父类用来继承的,抽象类的抽象方法没有实现,就算创建了调用也没用,无法编译。

    展开全文
  • 抽象类能创建对象吗?

    千次阅读 2020-07-15 00:27:20
    抽象类不能创建对象的原因: 1.子类更具体,父类更抽象,直接创建父类对象本身没有意义。 2.如果创建的是父类对象再调用方法的时候,调用的父类中的方法,而非子类的方法,它违背了多态的这种思想和设计 3.因为...

    什么是抽象类呢?

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

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

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

    展开全文
  • 一, 不能创建对象的类抽象类(abstract)不能创建对象。这个大家应该都知道,所以在这里就不班门弄斧了。 简单回顾需要注意的几点: 包含抽象方法的类,必须声明为抽象类。 声明为抽象类的类,不一定非要包含抽象...

    一, 不能创建对象的类

    抽象类(abstract)不能创建对象。这个大家应该都知道,所以在这里就不班门弄斧了。
    简单回顾需要注意的几点:

    1. 包含抽象方法的类,必须声明为抽象类。
    2. 声明为抽象类的类,不一定非要包含抽象方法。
    3. 抽象类包含具体数据和具体方法。
    4. 抽象类不能创建对象,但可以定义对象变量,来引用非抽象子类的对象
    Persion p=new Student();//其中Persion是抽象类,p是对象变量,Student是实现了Persion中所有抽象方法的非抽象之类。
    

    之所以强调非抽象子类,是因为扩展(即继承)抽象类的子类有两种类型:
    (1)子类还是抽象类:实现了部分抽象方法或没实现任何抽象方法;
    (2)非抽象子类:实现了抽象类的全部抽象方法

    OK,以上是当做复习吧。但是那些类不需要创建对象,为什么不需要对象呢?

    二,不需要创建对象的类

    java.lang.Math类。它没有数据域(属性),只封装了功能(行为)。所有的方法都是静态的,即方法是属于类的不需要调用对象类可以直接调用。
    其他角度来看,对象的三要素:状态(即数据域值的集合),行为(可以对对象施加的操作),标识(用来辨别具有相同行为和相同状态的对象)。没有数据域,也就是没有状态,都不满足对象三要素,故没必要创建对象,在说假如创建了对象,你的方法去操作谁呢,他就没有数据域。

    思考题也是求助?那些方法不能被覆盖(重写)呢??

    展开全文
  • 一Java抽象类  在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如 ...由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为
  • 抽象类

    2020-06-16 15:38:32
    3. 抽象类是无法实例化的,无法创建对象,所以抽象类就是用来被继承的。 4. 虽然抽象类无法实例化,但是抽象类也有构造方法,该构造方法是提供给子类使用的。 5. abstract和final不能联合使用。 6. 抽象类的子类...
  • 抽象类的实现问题

    千次阅读 2018-12-14 09:05:22
    抽象类的实现问题 包含抽象方法的类称为抽象类,但并不意味着抽象类中只能有抽象方法,它和普通类一样,同样可以拥有成员变量和普通的成员...2)抽象类不能用来创建对象; 3)如果一个类继承于一个抽象类,则子类必...
  • 一.java抽象类 ...抽象类不能用来创建对象,它是一个没有足够信息去实例化的类;  3.如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则子类也必须为ab
  • 所谓抽象类就是不能创建对象的类 它存在的价值是留给它的子类去继承(3).经验:我们强烈建议将用来继承的类声明为抽象类注意:(python语法中是没有真正的抽象类和抽象方法,需要使用abc模块去实现类和方法的抽象)抽象类...
  • Java 抽象类

    千次阅读 多人点赞 2019-01-28 09:16:52
    在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类抽象类除了不能实例化对象之外,...
  • 抽象类和普通类的区别:

    千次阅读 2017-10-27 23:06:32
    包含抽象方法的类称为抽象类,但并不意味着抽象类中只能有抽象方法,它和普通类一样,同样可以拥有成员变量和普通的成员方法。...2)抽象类不能用来创建对象; 3)如果一个类继承于一个抽象类,则子类必须实现父类的
  • JavaSe·面向对象篇(六) 抽象类 1. 抽象类概述 1.1 由来 父类中的方法,被它的子类们重写,子类各自的实现都不尽相同。那么父类的方法声明和方法主体,只有声明还有意义,而方法主体则没有存在的意义了。我们把没有...
  • Java笔试面试-抽象类与接口

    万次阅读 多人点赞 2019-09-15 22:29:50
      在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。简单来说,使用关键字 ...
  • 抽象类和接口

    2019-11-22 12:33:52
    学习内容 抽象类(abstract) 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘...由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原...
  • java抽象类

    万次阅读 多人点赞 2019-05-13 21:39:28
    在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类;抽象来除了不能实例化对象之外,类...
  • 小白易懂面向对象-什么是类、实例化、对象抽象类 类 所谓类,就是女娲所设计的这几张设计方案,所有的设计方案,都是类 在编程里,我们都称作类 比如 某个程序员说,我想要创建一个类,其实他就是打算创建一个...
  • 动态代理 ,接口 ,抽象类

    千次阅读 2017-02-15 18:25:30
    包含抽象方法的类称为抽象类,但并不意味着抽象类中只能有抽象方法,它和普通类一样,同样可以拥有成员变量和普通的成员方法。... 2)抽象类不能用来创建对象;  3)如果一个类继承于一个抽象类,则子类必
  • Python抽象类

    千次阅读 2018-06-24 12:06:36
    在客户的应用程序中,抽象类不能正常实例化的,它的子类叫做具体类,这表明它们才是真正用来在客户应用程序中创建对象的类。设计一个AbstractBag类前面我们在Python 基于数组、链表实现的包接口中以不同方法实现了...
  • java之抽象类总结

    2017-03-29 17:00:18
    抽象类使用abstract关键字来定义,包含抽象方法,抽象方法只是对方法的声明,但是没有方法主体。...2、抽象类不能实例化,不能用new关键字创建对象 3、只有子类覆盖所有的抽象方法后,子类就可以创建对象;如果没有
  • 抽象类和接口是多态应用时使用最多的。多态是面向对象编程的一个非常重要的思想,它的含义就是父类的引用指向子类的对象。而抽象类和接口都是用来集成的,不能用来创建对象
  • 面向对象基础指数(7)抽象类 接口

    千次阅读 热门讨论 2014-03-15 20:54:40
    今天给大家带来了抽象类与接口、正所谓懂得抽象的程序员完全算是程序员 抽象类 一句话抽象类就是类的抽象 打个比方吧、下面有这么几个类 小猫类 小狗类 鸟类 鱼类 这四个类肯定有一些共同的方法、如吃饭、睡觉...
  • 不能创建对象的三种情况!!!

    千次阅读 2019-05-21 21:26:58
    不能创建对象的三种情况 private修饰的私有对象          构造方法私有,不能创建对象         原因 : 因为子类要创建对象,...
  • 面向对象编程之继承、多态、封装、抽象类、接口、包继承类的继承格式为什么要继承继承的特点继承的种类及关键字访问权限多态向上转型动态绑定方法重写重写和重载的区别比较多态的优点封装实现Java的封装封装的优点...
  • 抽象类、接口、内部类

    千次阅读 2018-12-02 16:09:27
    抽象类 抽象方法和抽象类 抽象方法和抽象类必须使用...即使抽象类里不包含抽象方法,这个抽象类不能创建实例; 抽象类可以包含成员变量、方法(普通方法和抽象方法都可以)、构造器、初始化块、内部类(接口、...
  • 抽象类中为什么不能有构造函数?

    千次阅读 2012-03-03 21:02:26
    在java,C#还是C++中,我们都知道有一种类型的类叫抽象类。 而且在面试过程中我们也经常被面试官问起,为什么抽象类里面 不能有构造函数。...而抽象类不能被实例化,所以也就没有必要需要构造函数了。
  • Java学习笔记一面向对象抽象类

    千次阅读 2020-03-16 12:25:28
    抽象方法和抽象类必须使用abstract
  • Python中的的定义和对象创建

    万次阅读 多人点赞 2018-08-16 17:35:59
    面向对象中两个重要的概念: ...一个可以创建无穷多个对象,每个对象都属于。 1.创建类创建类对象 1.创建类主要由类名,属性,方法组成,当然创建一个时,属性和方法可以选择的。 cla...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 460,070
精华内容 184,028
关键字:

抽象类不能用来创建对象