精华内容
下载资源
问答
  • 具体与抽象的关系
    千次阅读
    2020-12-08 19:11:42

    抽象类和具体类的区别

    概念:

    抽象类是指被abstract修饰符所修饰的类
    具体类则是指没有被abstract修饰符所修饰的类(即大家常说的普通类)
    

    相同点:

    抽象类和具体类的类体中都可以声明字段、方法、构造、初始化器、内部类
    抽象类和具体类都可以直接继承具体类
    抽象类和具体类都可以直接实现单个或多个接口
    

    区别:

    抽象类中可以声明抽象方法,具体类中不可以声明抽象方法
    抽象类不可以直接实例化,具体类可以直接实例化
    抽象类和直接继承抽象类,具体类继承抽象类时必须实现所有的抽象方法
    抽象类继承接口时可以不实现接口中的抽象方法,具体类实现接口必须实现接口中的抽象方法
    抽象类不能被final修饰符修饰,具体类可以被final修饰(被final修饰的类是最终类)
    
    更多相关内容
  • 抽象与具体类区别

    千次阅读 2018-07-07 12:28:00
    abstract 抽象是不能被直接实例化的类、用例、信号、其他类元或其他泛化元素,它也可以用来描述没有实现的操作。反义词:具体(concrete)。 见抽象操作(abstract opera
    原文地址为: 抽象类与具体类区别

    abstract

    抽象是不能被直接实例化的类、用例、信号、其他类元或其他泛化元素,它也可以用来描述没有实现的操作。反义词:具体(concrete)

    抽象操作(abstract operation)可泛化元素(generalizable element)

    语义

    抽象类是不可被实例化的类,即它可以没有直接实例,这既可能是因为它的描述是不完整的(如缺少一个或多个操作的方法),也可能是因为即使它的描述是完整的它也不想被实例化。抽象类是为了以后说明。抽象类必须有可能含有实例的后代才能使用,一个抽象的叶类是没用的(它可以作为叶在框架中出现,但是最终它必须被说明)。

    具体类可以没有任何抽象操作(否则,它必为抽象的),但是抽象类可以有具体操作。具体操作是可以被实现一次并在所有子类中不变地使用的操作。在它们的实现中,具体操作可以只使用声明它们的类所知道的特征(属性和操作)。继承的目的之一即将这些操作在抽象的超类中分解以使得它们可以被所有的子类分享。一个具体操作可以是多态的,即后代类中的方法优先于它,但是它也可以不必是多态的,它可以是一个叶操作。一个所有操作都被实现的类可以是抽象的,但是这一点必须被明确声明。一个有着一个或多个未实现操作的类自然是抽象的。

    同样的语义也适用于用例。抽象的用例定义了行为的片断,这个行为自己不能出现,但是它可以通过泛化、包括或扩展关系在具体用例的定义中出现。通过在抽象的用例中分解公用的行为,模型变得更小和易于理解。

    类似的关系也存在于其他的类元和泛化元素中。


    转载请注明本文地址: 抽象类与具体类区别
    展开全文
  • 对象的关系是什么

    千次阅读 2021-03-05 17:18:41
    对象的关系是:类和对象之间是抽象与具体关系。类是一个模板,是对一类事物的抽象描述;对象用于表示现实中该事物的个体。类是在对象之上的抽象,对象则是类的具体化,是类的实例。类对象有什么关系?类和...

    类与对象的关系是:类和对象之间是抽象与具体的关系。类是一个模板,是对一类事物的抽象描述;对象用于表示现实中该事物的个体。类是在对象之上的抽象,对象则是类的具体化,是类的实例。

    694ced9a151a50d95eb05a4df9453c84.png

    类与对象有什么关系?

    类和对象之间是抽象与具体的关系。类是一个模板,是对一类事物的抽象描述,而对象用于表示现实中该事物的个体。类是在对象之上的抽象,对象则是类的具体化,是类的实例。

    类必须通过对象才可以使用,而对象中的属性和行为必须在类中定义。

    什么是对象?

    对象(Object)是一个应用系统中的用来描述客观事物的实体,是有特定属性和行为(方法)的基本运行单位。是类的一个特殊状态下的实例。对象可以是一个实体、一个名词、一个可以想象为有自己标识的任何东西,可以概括来说:万物皆对象。

    (视频教程推荐:java视频教程)

    什么是类?

    类(Class)是Java代码的基本组织模块,使用来描述一组具有共同属性和行为对象的基本原型。是对这组对象的概括、归纳和描述表达。类是对象的模板,它定义了本类对象的所拥有的属性集和行为集,是对一组具有相同属性和相同方法的对象的定义。

    展开全文
  • 抽象接口之间的继承和实现关系  对于面向对象编程来说,抽象是它的一大特征之一。在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类。这两者有太多相似的地方,又有太多不同的地方。很多人在初学的...

    抽象类与接口之间的继承和实现关系

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

      一.抽象类

      二.接口

      三.抽象类和接口的区别

      【关于接口与抽象类的介绍转载自网友海子(个人非常喜欢的一位博主,博客内容十分丰富,想学习更多java知识的同学可以戳下面的链接),在文章后面将结合线程池的设计例子介绍接口与抽象类的关系】

         四.抽象类与接口的继承与实现关系

         请尊重作者劳动成果,转载请标明原文链接:

      http://www.cnblogs.com/dolphin0520/p/3811437.html

    一.抽象类

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

    1
    abstract  void  fun();

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

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

    1
    2
    3
    [ public abstract  class  ClassName {
         abstract  void  fun();
    }

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

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

      1)抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public。

      2)抽象类不能用来创建对象;

      3)如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。

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

    二.接口

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

    1
    2
    3
    [ public interface  InterfaceName {
     
    }

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

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

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

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

    三.抽象类和接口的区别

    1.语法层面上的区别

      1)抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract 方法;

      2)抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的;

      3)接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;

      4)一个类只能继承一个抽象类,而一个类却可以实现多个接口。

    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( )两个动作,此时我们可以定义通过抽象类和接口来定义这个抽象概念:

    1
    2
    3
    4
    abstract  class  Door {
         public  abstract  void  open();
         public  abstract  void  close();
    }

      或者:

    1
    2
    3
    4
    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接口。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    interface  Alram {
         void  alarm();
    }
     
    abstract  class  Door {
         void  open();
         void  close();
    }
     
    class  AlarmDoor  extends  Door  implements  Alarm {
         void  oepn() {
           //....
         }
         void  close() {
           //....
         }
         void  alarm() {
           //....
         }
    }

     

    四、抽象类与接口的继承与实现关系

        以线程池的例子来说明接口、抽象类以及类在继承和现实时需要注意的事项

    1.接口继承接口(接口不能实现接口)

    Executor是线程池的顶层接口,只有一个方法

    1
    2
    3
    public  interface  Executor {
         void  execute(Runnable command);
    }

    public interface ExecutorService extends Executor {
          <strong> // <span style="font-family: Verdana, Arial, Helvetica, sans-serif;">ExecutorService 接口继承自接口Executor</span></strong>
        void shutdown();
        boolean isShutdown();
        boolean isTerminated();
        boolean awaitTermination(long timeout, TimeUnit unit)
            throws InterruptedException;
        <T> Future<T> submit(Callable<T> task);
    }

    2.抽象类实现接口(抽象类不能继承接口)

    <pre name="code" class="java">public abstract class AbstractExecutorService implements ExecutorService {
       <strong> // AbstractExecutorService 实现ExecutorService接口,不需要实现ExecutorService接口的方法,因为接口可以看做一种特殊的抽象类       // 抽象类里边的普通方法必须包含方法体,即必须有{},而抽象方法不能有方法体,必须用abstract声明。</strong>
        protected <T> RunnableFuture<T> newTaskFor(Runnable runnable, T value) { };
        protected <T> RunnableFuture<T> newTaskFor(Callable<T> callable) { };
        public Future<?> submit(Runnable task) {};
        public <T> Future<T> submit(Runnable task, T result) { };
        public <T> Future<T> submit(Callable<T> task) { };
        private <T> T doInvokeAny(Collection<? extends Callable<T>> tasks,
                                boolean timed, long nanos)
            throws InterruptedException, ExecutionException, TimeoutException {
        };
    }

     3.普通类继承抽象类或实现接口 
     

        普通类继承抽象类:必须实现抽象类的所有抽象方法和该抽象类父类的所有方法

        普通类实现接口:必须实现接口及其父接口的全部方法

            public interface A{
    		void a();
    	}
    	
    	public interface B extends A{
    		void b();
    	}
    	
    	public abstract class C implements B{
    		void c(){};
    		abstract void c1();
    	}
    	
    	
    	class D extends C{
    
    		@Override
    		public void b() {
    			// TODO Auto-generated method stub
    			
    		}
    
    		@Override
    		public void a() {
    			// TODO Auto-generated method stub
    			
    		}
    
    		@Override
    		void c1() {
    			// TODO Auto-generated method stub
    			
    		}
    		
    	}
    	
    	class E implements B{
    
    		@Override
    		public void a() {
    			// TODO Auto-generated method stub
    			
    		}
    
    		@Override
    		public void b() {
    			// TODO Auto-generated method stub
    			
    		}
    		
    	}



    展开全文
  • 要依赖于抽象,不要依赖于具体

    千次阅读 2020-12-24 20:13:44
    在面向对象设计原则中,要求"要依赖于抽象,不要依赖于具体", 这句话有很多人搞不懂。在这里谈谈我自己的理解。首先看看以下代码 class A{ public void swim(){ Dog dog = new Dog(); dog.move(); } } Swim方法...
  • Java中的抽象类和接口

    千次阅读 多人点赞 2022-04-08 15:17:42
    各位铁汁们大家好呀!今天让我们继续学习java,看看java中的抽象类和接口到底是什么? 里面也会讲到多态呀,一起来看看吧
  • Java:接口和抽象类,傻傻分不清楚?

    千次阅读 多人点赞 2019-04-26 07:28:15
    再来聊聊接口和抽象类。
  • 抽象类是否可继承具体类?抽象类中是否可以有静态的main方法? 上面这个题目我们来慢慢的剖析一下。先从基本的概念说起。 一、接口 官方解释:Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的...
  • 所谓"抽象""具体

    千次阅读 2017-10-14 23:52:35
    抽象
  • “成功的路上并不挤,只是你淘汰了你自己”,你好,我是梦阳辰,未来我陪你一起成长。...数据操作:对数据库的查询更新。 完整性约束:对数据施加规则和限制。 数据模型的类型: 1)概念模型 概念模型是对真实.
  • 数据库实体联系模型与关系模型

    千次阅读 2020-03-02 19:11:33
    数据库设计是指根据用户的需求,在某一具体的数据库管理系统上,设计数据库的结构和建立数据库的过程。...因此,规划数据构成及数据间关系,并应用某一具体的数据库管理系统如MySQL构建数据库的过程就是...
  • 原标题:如何理解多元函数可微可偏导的关系?谈到多元函数可微可偏导时,相信不少人头皮有点发麻。一元函数中,可微可导是等价的,但是在多元函数中,可微可偏导之间的关系就没那么简单了,这是为什么呢?...
  • final和abstract的关系抽象类的特征

    千次阅读 2022-04-15 20:02:55
    对象是具体的东西,创建对象也就是类的实例化,把一个模板形象化表述出来,因为抽象类自己都不知道自己是什么,所以就没发new出来一个对象,抽象类没说具体的逻辑,想到于我要做模板的事务,抽象类自己也弄不清楚,...
  • 数据库关系代数详解

    万次阅读 多人点赞 2021-02-26 16:35:55
    数据库关系代数 1. 关系代数的运算 1.1 传统的关系运算 传统的关系运算起源于数学的集合论,有下面几种: 笛卡尔积运算 差运算 交运算 并运算 1.2 专门的关系运算 选择 投影 连接 除运算 1.2.1 关系运算中的基础...
  • 抽象类和接口的区别以及抽象类和接口的使用场景

    万次阅读 多人点赞 2019-05-30 18:15:44
    在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就可以称之为抽象类。 1.抽象方法:使用...
  • C语言之抽象数据类型(四十七)

    千次阅读 2022-03-15 13:38:38
    具体分为:数据对象、数据对象关系的集合、数据对象基本操作的集合。 抽象数据类型的定义格式如下: ADT抽象数据类型名( 数据对象:(数据对象的定义〉 数据关系:(数据关系的定义〉 基本操作:(基本操作的定义...
  • 面向对象——抽象与抽象方法

    千次阅读 2020-04-13 09:26:04
    如果一个类不与具体的食物相联系,而只表达一种抽象的概念,仅是作为其派生类的一个基类,这样的类就是派生类,在抽象类中,声明抽象类中声明抽象方法是,如果加上abstract关键字则为抽象方法。abstract 修饰符可...
  • C#中抽象与抽象方法的详解

    万次阅读 2020-06-17 17:41:11
    抽象类的含义是什么? 抽象类怎么创建? 抽象类的规则有哪些? 抽象方法? 抽象类被运用的意义是什么?
  • C#.net有什么关系

    千次阅读 2022-05-08 15:18:49
    接下来在文章中将具体介绍它们之间的关系,具有一定的参考作用,希望对大家有所帮助 .NET 的介绍 .NET 一般指的是.Net Framework框架,它是由Microsoft为开发应用程序而创建的一个平台。主要用于Wind
  • 1.具体产品在应用层的代码隔离,无需关系创建的细节 2.将一个系列的产品统一到一起创建 缺点: 1.规定了所有可能被创建的产品集合,产品族中扩展新的产品困难; 2.增加了系统的抽象性和理解难度 2、使用场景 1....
  • 依赖倒置原则(Dependence ...细节:即具体的实现类,实现接口或者继承抽象类所产生的类,两者可以通过关键字new直接被实例化。依赖倒置原则在Java语言中的表现是:模块间的依赖通过抽象发生,实现类之间不发...
  • Java中“接口”“类”的关系

    千次阅读 2020-08-01 19:40:26
    接口类的关系
  • 1. 抽象类:(1).概念:抽象类是对一种事物的抽象,即对类抽。.抽象类是对整个类整体进行抽象,包括属性、行为。Java抽象类和Java接口一样,都用来声明一个新的类型。并且作为一个类型的等级结构的起点。(2).格式:...
  • Java抽象类和抽象方法归纳总结

    千次阅读 2020-06-11 12:26:24
    文中引用的具体例子在这里:抽象类的一个例子 Triangle类是继承自抽象类GeometriObject的具体子类 GeometriObject中包含两个抽象方法:getPerimeter,getArea/ Triangle中实现了这两个方法 好了,进入正题。 目录...
  • [UML] 类图之间的关系 | 4.接口实现关系 ...有一个交通工具Vehicle接口,之中有一个抽象操作move(),在类ship和car中,都实现了move()操作,但是实现的具体细节不一样。 Java代码 public
  • Java中抽象方法的重写

    千次阅读 2020-11-10 22:29:33
    抽象类:抽象的、模糊的、不具体的类 在Java的普通类中是不允许多继承的,原因是会出现调用 不明确的问题; 总结:父类中的功能是不能删除的,但其形式是不需要的(没有存在的意义),此时就可以将父类中功能的 具体...
  • 抽象数据类型案例

    千次阅读 多人点赞 2021-11-16 21:28:55
    数据结构-第一章-抽象数据类型案例数据结构前言一、介绍二、c++实现总结 前言 一、介绍 抽象数据类型(ADT)是指一个数学模型以及定义在该模型上的一组操作。其定义取决于它的一组逻辑特性,而其在计算机内部...
  • 第四章 抽象接口

    千次阅读 2020-04-11 21:02:46
    抽象接口区别1、结构2、继承方式3、构造方法4、多/单继承5、速度6、设计举例四.父类的静态方法能不能被子类重写1、重写/重载2、静态方法3、父类的静态方法能不能被子类重写? abstract class和interface是Java...
  • java抽象类和继承关系

    千次阅读 2013-07-02 23:59:12
    有时候,我们可能想要构造一个很抽象的父类对象,它可能仅仅代表一个分类或抽象概念,它的实例没有任何意义,因此不希望它能被实例化。例如:有一个父类“ 水果(Fruit)”,它有几个子类“苹果(Apple)”、“橘子...
  • 概述 抽象与概括是数学思想方法的最基本内容之一。 抽象指在认识事物的过程中,舍弃那些个别的、偶然的非本质属性,抽取普通的、必然的本质属性,形成科学概念,从而掌握事物的本质和规律。 概括指的是在认识事物...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 476,795
精华内容 190,718
热门标签
关键字:

具体与抽象的关系

友情链接: MenuXP_demo_1.zip