精华内容
下载资源
问答
  • 2021-05-06 14:22:31

    抽象类

    Java中的抽象类主要是作为一个公共父类的作用,它可以抽象出用来描述一种类型应该具备的基本特征与功能,具体行为则由子类通过方法重写来完成。

    抽象类具有的性质
    • 类定义前需要加上abstract关键字
    • 抽象类中可以没有抽象方法
    • 抽象类中可以有非抽象方法
    • 如果一个类中有至少一个抽象方法,那么它一定是抽象类,则类名前必须加上abstract关键字,抽象方法没有方法体。
    • 抽象类无法实例化
    • 只有覆盖了抽象类中所有的抽象方法后,其子类才可以实例化。如果存留未实现的抽象方法则该子类仍为一个抽象类,无法创建对象。
    抽象类的意义

    抽象类往往用来表示对问题领域进行分析、设计中得出的抽象概念。其存在的意义在于其设计性、复用性与扩展性。抽象类方便了具体类的定义。

    抽象类可以实现接口

    抽象类实现接口其所具有的意义:
    1.一般而言,多使用普通类来实现接口,但是普通类实现接口的话就必须实现接口的所有方法,这样容易造成代码冗余。
    2.而如果使用抽象类来实现接口,然后再用普通类继承抽象类的话,其仍然可以实现接口中但抽象类中并未实现的方法。以此可以只实现必要的方法,即抽象类中可以不定义对于子类而言必要的方法,而最终交由子类自己来实现。
    3.从2中可知,抽象类实现接口时,不必实现接口中的所有方法,未实现的方法可以交由子类来实现。

    更多相关内容
  • 一、java抽象类的作用java抽象类的作用具体的可以分成以下的三点:1、抽象类通常都是用来表征对问题领域进行分析、设计得出的抽象概念,是对大多数看上去不同,可是本质上却是相同的具体概念的抽象2、在面向对象...

    你知道java当中抽象类的作用是什么吗?有什么作用?下面和小编一起来详细的了解一下具体的作用,以及看看抽象类作用的例子吧!

    一、java抽象类的作用

    java抽象类的作用具体的可以分成以下的三点:

    1、抽象类通常都是用来表征对问题领域进行分析、设计中得出的抽象概念,是对大多数看上去不同,可是本质上却是相同的具体概念的抽象

    2、在面向对象方法当中,抽象类主要是用来进行类型隐藏

    构造出一个固定的一组行为的抽象描述,可是这组行为却可以有任意个可能的具体实现方式,这个抽象描述就是我们所说的抽象类

    这一组任意个可能的具体实现就表现为所有可能的派生类

    模块能够操作一个抽象体

    因为模块依赖于一个固定的抽象体,所以它可以是不允许修改的

    3、通过从这个抽象体派生,也能够扩展这个模块的行为功能

    为了可以实现面向对象设计的一个最核心的原则,也就是OCP,抽象类可以说是这当中一个很关键的东西

    二、抽象类作用例子//抽象类的作用;模板作用(本例中:

    //抽象的父类中,父类的普通方法依赖于一个抽象方法,而抽象方法则推迟到子类中

    //去实现)

    abstract class SpeedMeter

    {

    private double turnRate;

    public SpeedMeter()

    {}

    public abstract double getRadius();

    public void setTurnRate(double turnRate)

    {

    this.turnRate = turnRate;

    }

    //定义计算速度的方法

    public double getSpeed()

    {

    //速度等于车轮半径*2*PI*转速

    return java.lang.Math.PI * 2 * getRadius() * turnRate;

    }

    }

    public class CarSpeedMeter extends SpeedMeter

    {

    public double getRadius()

    {

    return 0.28;

    }

    public static void main(String[] args)

    {

    CarSpeedMeter csm = new CarSpeedMeter();

    csm.setTurnRate(15);

    System.out.println(csm.getSpeed());

    }

    }

    以上就是对于java中抽象类的作用以及例子的介绍,更多java抽象类常见问题,请继续关注本站来进行了解吧。

    推荐阅读:

    展开全文
  • java中抽象类的定义和使用

    千次阅读 2021-02-28 18:13:01
    java虽然比较简单,但是细节的知识点还是很多的,现在,介绍一下抽象类的定义和实现基础。指的是在类中定义方法,而不去实现它,而在它的子类中去具体实现,...注意:在抽象类中的方法不一定是抽象方法,含有抽象方...

    java虽然比较简单,但是细节的知识点还是很多的,现在,介绍一下抽象类的定义和实现基础。

    指的是在类中定义方法,而不去实现它,而在它的子类中去具体实现,继承抽象类的子类必须实现父类的抽象方法,除非子类是一个被定义的抽象类。

    1、抽象类定义的格式

    修饰符 abstract 类名 {

    类体

    }

    2、抽象方法格式:

    修饰符 abstract 返回值类型 方法名();

    注意:在抽象类中的方法不一定是抽象方法,含有抽象方法的类必须定义成抽象类。

    3、案例证明

    package for_apro;

    import java.util.*;

    //抽象类的声明

    abstract class Animal {

    String type;

    String name;

    int age;

    int weight;

    void eat() {

    System.out.println("动物爱吃饭");

    }

    //抽象方法在抽象类中只能声明,不能具体实现

    abstract void breath();

    void sleep() {

    System.out.println("动物在睡觉");

    }

    }

    //由子类去继承父类抽象类

    class tiger extends Animal{

    @Override

    //在此处实现抽象方法

    void breath() {

    // TODO Auto-generated method stub

    System.out.println("老虎在呼吸");

    }

    }

    public class first_for {

    public static void main(String [] args){

    // 错误,程序会报错

    //报错原因:抽象类不能进行实例化操作

    //Animal Tiger = new Animal();

    //只能用子类进行实例化

    Animal Tiger = new tiger();

    Tiger.breath();

    }

    }执行结果:

    老虎在呼吸

    本文同步分享在 博客“Engineer-Bruce_Yang”(CSDN)。

    如有侵权,请联系 support@oschina.cn 删除。

    本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

    展开全文
  • Java中抽象类和接口的区别

    万次阅读 多人点赞 2019-02-07 14:10:07
    Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类。这两者有太多相似的地方,又有太多不同的地方。很多人在初学的时候会以为它们可以随意互换使用,但是实际则不然。今天我们就一起来学习一下Java中的接口...

    对于面向对象编程来说,抽象是它的一大特征之一。在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类。这两者有太多相似的地方,又有太多不同的地方。很多人在初学的时候会以为它们可以随意互换使用,但是实际则不然。今天我们就一起来学习一下Java中的接口和抽象类。

    一、抽象类

    在了解抽象类之前,先来了解一下抽象方法。抽象方法是一种特殊的方法:它只有声明,而没有具体的实现。抽象方法的声明格式为:

    abstract void fun();

    抽象方法必须用abstract关键字进行修饰。如果一个类含有抽象方法,则称这个类为抽象类,抽象类必须在类前用abstract关键字修饰。因为抽象类中含有无具体实现的方法,所以不能用抽象类创建对象。

    下面要注意一个问题:在《JAVA编程思想》一书中,将抽象类定义为“包含抽象方法的类”,但是后面发现如果一个类不包含抽象方法,只是用abstract修饰的话也是抽象类。也就是说抽象类不一定必须含有抽象方法。个人觉得这个属于钻牛角尖的问题吧,因为如果一个抽象类不包含任何抽象方法,为何还要设计为抽象类?所以暂且记住这个概念吧,不必去深究为什么。

    [public] abstract class ClassName {
    
        abstract void fun();
    
    }

     从这里可以看出,抽象类就是为了继承而存在的,如果你定义了一个抽象类,却不去继承它,那么等于白白创建了这个抽象类,因为你不能用它来做任何事情。对于一个父类,如果它的某个方法在父类中实现出来没有任何意义,必须根据子类的实际需求来进行不同的实现,那么就可以将这个方法声明为abstract方法,此时这个类也就成为abstract类了。

    包含抽象方法的类称为抽象类,但并不意味着抽象类中只能有抽象方法,它和普通类一样,同样可以拥有成员变量和普通的成员方法。注意,抽象类和普通类的主要有三点区别:

    • 抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public。
    • 抽象类不能用来创建对象;
    • 如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。

    在其他方面,抽象类和普通的类并没有区别。

    二、接口

    接口,英文称作interface,在软件工程中,接口泛指供别人调用的方法或者函数。从这里,我们可以体会到Java语言设计者的初衷,它是对行为的抽象。在Java中,定一个接口的形式如下:

    [public] interface InterfaceName {
    
     
    
    }

    接口中可以含有 变量和方法。但是要注意,接口中的变量会被隐式地指定为public static final变量(并且只能是public static final变量,用private修饰会报编译错误),而方法会被隐式地指定为public abstract方法且只能是public abstract方法(用其他关键字,比如private、protected、static、 final等修饰会报编译错误),并且接口中所有的方法不能有具体的实现,也就是说,接口中的方法必须都是抽象方法。从这里可以隐约看出接口和抽象类的区别,接口是一种极度抽象的类型,它比抽象类更加“抽象”,并且一般情况下不在接口中定义变量。

    要让一个类遵循某组特地的接口需要使用implements关键字,具体格式如下:

    class ClassName implements Interface1,Interface2,[....]{
    
    }

    可以看出,允许一个类遵循多个特定的接口。如果一个非抽象类遵循了某个接口,就必须实现该接口中的所有方法。对于遵循某个接口的抽象类,可以不实现该接口中的抽象方法。

    三、抽象类和接口的区别

    1.语法层面上的区别

    • 抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract 方法;
    • 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的;
    • 接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;
    • 一个类只能继承一个抽象类,而一个类却可以实现多个接口。

    2.设计层面上的区别

    1)抽象类是对一种事物的抽象,即对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。举个简单的例子,飞机和鸟是不同类的事物,但是它们都有一个共性,就是都会飞。那么在设计的时候,可以将飞机设计为一个类Airplane,将鸟设计为一个类Bird,但是不能将 飞行 这个特性也设计为类,因此它只是一个行为特性,并不是对一类事物的抽象描述。此时可以将 飞行 设计为一个接口Fly,包含方法fly( ),然后Airplane和Bird分别根据自己的需要实现Fly这个接口。然后至于有不同种类的飞机,比如战斗机、民用飞机等直接继承Airplane即可,对于鸟也是类似的,不同种类的鸟直接继承Bird类即可。从这里可以看出,继承是一个 "是不是"的关系,而 接口 实现则是 "有没有"的关系。如果一个类继承了某个抽象类,则子类必定是抽象类的种类,而接口实现则是有没有、具备不具备的关系,比如鸟是否能飞(或者是否具备飞行这个特点),能飞行则可以实现这个接口,不能飞行就不实现这个接口。

    2)设计层面不同,抽象类作为很多子类的父类,它是一种模板式设计。而接口是一种行为规范,它是一种辐射式设计。什么是模板式设计?最简单例子,大家都用过ppt里面的模板,如果用模板A设计了ppt B和ppt C,ppt B和ppt C公共的部分就是模板A了,如果它们的公共部分需要改动,则只需要改动模板A就可以了,不需要重新对ppt B和ppt C进行改动。而辐射式设计,比如某个电梯都装了某种报警器,一旦要更新报警器,就必须全部更新。也就是说对于抽象类,如果需要添加新的方法,可以直接在抽象类中添加具体的实现,子类可以不进行变更;而对于接口则不行,如果接口进行了变更,则所有实现这个接口的类都必须进行相应的改动。

    下面看一个网上流传最广泛的例子:门和警报的例子:门都有open( )和close( )两个动作,此时我们可以定义通过抽象类和接口来定义这个抽象概念:

    abstract class Door {
    
        public abstract void open();
    
        public abstract void close();
    
    }

    或者:

    interface Door {
    
        public abstract void open();
    
        public abstract void close();
    
    }

    但是现在如果我们需要门具有报警alarm( )的功能,那么该如何实现?下面提供两种思路:

    1)将这三个功能都放在抽象类里面,但是这样一来所有继承于这个抽象类的子类都具备了报警功能,但是有的门并不一定具备报警功能;

    2)将这三个功能都放在接口里面,需要用到报警功能的类就需要实现这个接口中的open( )和close( ),也许这个类根本就不具备open( )和close( )这两个功能,比如火灾报警器。

    从这里可以看出, Door的open() 、close()和alarm()根本就属于两个不同范畴内的行为,open()和close()属于门本身固有的行为特性,而alarm()属于延伸的附加行为。因此最好的解决办法是单独将报警设计为一个接口,包含alarm()行为,Door设计为单独的一个抽象类,包含open和close两种行为。再设计一个报警门继承Door类和实现Alarm接口。

    interface Alram {
    
        void alarm();
    
    }
    
     
    
    abstract class Door {
    
        void open();
    
        void close();
    
    }
    
     
    
    class AlarmDoor extends Door implements Alarm {
    
        void oepn() {
    
          //....
    
        }
    
        void close() {
    
          //....
    
        }
    
        void alarm() {
    
          //....
    
        }
    
    }

    最后再用一个表格的形式来总结一下抽象类和接口的区别:

    参数抽象类接口
    默认的方法实现它可以有默认的方法实现接口完全是抽象的。它根本不存在方法的实现
    实现子类使用extends关键字来继承抽象类。如果子类不是抽象类的话,它需要提供抽象类中所有声明的方法的实现。子类使用关键字implements来实现接口。它需要提供接口中所有声明的方法的实现
    构造器抽象类可以有构造器接口不能有构造器
    与正常Java类的区别除了你不能实例化抽象类之外,它和普通Java类没有任何区别接口是完全不同的类型
    访问修饰符抽象方法可以有publicprotecteddefault这些修饰符接口方法默认修饰符是public。你不可以使用其它修饰符。
    main方法抽象方法可以有main方法并且我们可以运行它接口没有main方法,因此我们不能运行它。
    多继承抽象方法可以继承一个类和实现多个接口接口只可以继承一个或多个其它接口
    速度它比接口速度要快接口是稍微有点慢的,因为它需要时间去寻找在类中实现的方法。
    添加新方法如果你往抽象类中添加新的方法,你可以给它提供默认的实现。因此你不需要改变你现在的代码。如果你往接口中添加方法,那么你必须改变实现该接口的类。

     我有一个微信公众号,经常会分享一些Java技术相关的干货;如果你喜欢我的分享,可以用微信搜索“Java团长”或者“javatuanzhang”关注。

    展开全文
  • java中抽象类可以实现接口吗

    千次阅读 2021-03-20 13:48:27
    抽象类可以实现接口 这是一种思想,当你自己的类中有共用的方法的时候,就可以在抽象类中先进行实现,然后再用你的类继承这个抽象类,如果你直接用类实现接口,那是所有方法都必须实现的 ...
  • java中抽象类与接口的区别

    千次阅读 2019-03-08 20:39:50
    这主要是由于定义抽象类的代价高(因为每个类只能继承一个类,在这个类中,必须继承或者编写出其子类的所有共性),因此,虽然接口在功能上会弱化很多,但它只是针对一个动作的描述,而且可以在一个类中同时实现多个...
  • 结论:abstract class和Interface是JAVA语言的两种定义抽象类的方式。Interface将abstract的概念作了更进一步的发挥。你可以想像Interface是“纯粹”的 abstract class,只可以包含抽象方法,也包括一些常量的定义...
  • 回想前面我们的猫狗案例,提取出一个动物类,并且我们在前面也创建了动物对象,其实...同理,我们也可以推想,不同的动物吃的东西应该是不一样的,所以,我们不应该在动物类中给出具体体现,而是给出一个声明即可。 ...
  • java中抽象类和接口的异同点

    千次阅读 2019-09-25 23:05:57
    抽象类: 关键字abstract 可以修饰类,也可以修饰方法 修饰类的话,可以创建构造方法,但是不可以被实例化,创建构造方法的目的是为了子类的调用 有抽象方法的类一定是抽象类抽象类可以没有抽象方法,抽象类...
  • Java中抽象类和接口

    千次阅读 多人点赞 2022-04-08 15:17:42
    各位铁汁们大家好呀!今天让我们继续学习java,看看java中抽象类和接口到底是什么? 里面也会讲到多态呀,一起来看看吧
  • 以举例的方式说到如何区分抽象类和接口,这里我们...4)在接口中凡是变量必须是public static final,而在抽象类中没有要求。忽然有此一文,是因为同学疑惑道:抽象类居然还有构造方法,又不能直接用来new。我的解释...
  • Java中抽象类的成员特点

    千次阅读 2019-04-24 11:29:42
    - A:抽象类的成员特点 a.成员变量:既可以是变量,也可以是常量。abstract是否可以修饰成员变量?不能修饰成员变量 b.构造方法:有。 用于子类访问父类数据的初始化。 c.成员方法:既可以是抽象的,也可以是非抽象的...
  • 说一下Java中抽象类和接口存在的意义与价值

    千次阅读 多人点赞 2018-10-15 16:29:41
    首先简单的介绍一下抽象类: 定义是很简单的,我们这里不写官方的语言,我自己看着都烦,我们就用白话介绍,抽象类本质是一个类,没问题,那么类里面一般都是有方法的,方法包括方法名和方法体,这是常识对不对,...
  • 简述Java中抽象类和接口,及其两者区别

    万次阅读 多人点赞 2018-04-19 13:00:48
    在说区别之前,先简要说一下什么是抽象类和接口   1.抽象类    用abstract修饰的类叫做抽象类。    在讲抽象类之前有必要强调一下abstract修饰符:  1.abstract修饰的类为抽象类,此类不能有对象,...
  • Java中抽象类可以有非抽象方法

    千次阅读 2020-07-03 20:57:37
    java中抽象类可以有非抽象方法、抽象方法 但是如果这个类有抽象方法那么它一定是抽象类 package com.d; public abstract class Vehicle { public abstract String NoOfWheels(); public String No(){ System.out...
  • Java中抽象类与方法的重写

    千次阅读 2020-11-10 22:29:33
    1. 抽象类 关键字:abstract 类:用来描述一类具体的事物 抽象类:抽象的、模糊的、不具体的类 在Java的普通类中是不允许多继承的,原因是会出现调用 不明确的问题;...抽象类中可以有构造器,但是不能创建
  • java抽象类 继承

    千次阅读 2021-03-08 06:02:32
    关于java抽象类 继承的搜索结果回答抽象类和接口的区别:默认的方法实现抽象类可以有默认的方法实现完全是抽象的。接口根本不存在方法的实现。抽象类中可以有已经实现了的方法,也可以有被abstract修饰的方法(抽象...
  • Java——抽象类

    千次阅读 2022-01-04 11:48:57
    目录Java——抽象类一、抽象类的基本概念二、抽象类的使用原则举例抽象类的使用原则:三、抽象类的使用限制1、抽象类中有构造方法吗?2、抽象类可以被final修饰吗?3、抽象类可以被static修饰吗?4、可以直接调用...
  • Java中抽象类与接口的详细说明

    万次阅读 多人点赞 2019-07-13 20:44:39
    首先简单的介绍一下抽象类: 定义是很简单的,我们这里不写官方的语言,我自己看着都烦,我们就用白话介绍,抽象类本质是一个类,没问题,那么类里面一般都是有方法的,方法包括方法名和方法体,这是常识对不对,...
  • java中抽象类和接口的特点

    千次阅读 2016-08-02 15:19:34
    2. 抽象类中不一定有抽象方法 3. 抽象类中可以存在抽象方法 4. 抽象类中可以存在构造方法 5. 抽象类中可以存在普通属性、方法、静态属性和静态方法 6. 抽象类中的抽象方法需要有子类实现,如果子类不实现,则子类也...
  • Java中抽象类与接口区别

    千次阅读 2017-12-20 09:18:19
    抽象类抽象类是无法实例化的特殊类。所以问题是为什么我们需要一个不能被实例化的类,抽象类只能是子类(继承自)。换句话说,它只允许其他类继承它,但不能实例化。优点是它为所有子类执行特定的层次结构。简而言之...
  • **抽象类可以使用implements关键字实现接口,但又不用在该抽象类里实现接口里的具体方法(不实现接口的具体方法不会报错),那设计抽象类可以使用implements来实现接口有什么意义啊?** 抽象类: public ...
  • java中抽象类和接口有什么区别

    千次阅读 2015-04-02 14:31:00
    抽象类(abstract class):含有abstract修饰符的类。它不能创建实例对象;含有abstract方法的类必须定义为abstract class;abstract class类中的方法不必是抽象的;abstract class类中定义抽象方法必须在具体子类...
  • Java抽象类 详解

    万次阅读 多人点赞 2016-10-05 00:06:35
    一、抽象类的基本概念普通类是一个完善的功能类,可以直接产生实例化对象,并且在普通类中可以包含有构造方法、普通方法、static方法、常量和变量等内容。而抽象类是指在普通类的结构里面增加抽象方法的组成部分。...
  • Java中抽象类得作用

    千次阅读 2019-06-18 17:59:40
    Java抽象类,可以理解为一种约定工具,在代码抽象类在某种情况适合用来写出大体框架,具体实现流程由抽象类事先定义完毕,具体实现过程可以定义抽象方法,而抽象方法交由子类去具体实现。 举个例子:定义一个...
  • Java中抽象类与接口,一篇就够啦

    千次阅读 多人点赞 2020-04-19 16:44:36
    文章目录Java中抽象类与接口Java中抽象类Java中接口 Java中抽象类与接口 Java中抽象类 抽象类的定义 定义:类的修饰符 abstract class 类名 抽象类跟普通的类定义相比,就是在原来的基础上,加上一个abstract...
  • Java中抽象类与接口有什么区别

    万次阅读 多人点赞 2019-06-13 20:55:16
    abstract class和interface是Java中对于抽象类定义两种机制,正是由于这两种机制的存在,才赋予Java强大的面向对象能力。abstract class和interface之间在对于抽象类定义的支持方面具有相当大的相似性,设置可以互相...
  • java抽象类详解

    千次阅读 2021-02-25 18:11:57
    前言在没讲抽象类之前 我们先来看看 final关键字final 修饰符 可以修饰 类、属性、方法修饰类时 表示该类不能被继承 其他特征 跟普通的类一样修饰 属性时 表示 改属性不能改变 并且 必须赋初始值修饰方法时 表示该...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 814,781
精华内容 325,912
关键字:

java中抽象类

java 订阅