精华内容
下载资源
问答
  • 我来谈自己的理解:抽象类就相当是一个概念.比如说水果.它不会产生具体的实例.所以就可以把水果定义为一个抽象类.还有一些共同的特性声明为抽象的.如水果都可以被吃.就可以将这个方法声明为抽象方法.当具体的子类调用...

    我来谈自己的理解:

    抽象类就相当是一个概念.比如说水果.它不会产生具体的实例.所以就可以把水果定义为一个抽象类.还有一些共同的特性声明为抽象的.如水果都可以被吃.就可以将这个方法声明为抽象方法.当具体的子类调用时就实现该功能.举个例子:

    Test.java

    -----------

    abstract class Fruit{

    public abstract void eated() ;

    }

    class Apple extends Fruit{

    public void eated(){

    System.out.println("吃苹果") ;

    }

    }

    class Orange extends Fruit{

    public void eated(){

    System.out.println("吃橘子") ;

    }

    }

    public class Test{

    public static void main(String[] args){

    new Apple().eated() ;

    new Orange().eated() ;

    }

    }

    --------------

    接口就相当于某个功能.当一个具体类要实现某个功能的时候.就通过实现某个接口来实现这个功能.接口可以自己定义.一个具体类可以实现多个接口.其可插入性要比抽象类好.就拿刚才的例子来说.苹果有被吃的功能.我们就把被吃声明为一个接口.

    Test.java

    ----------

    interface Eated{

    public abstract void eated() ;

    }

    class Apple implements Eated{

    public void eated(){

    System.out.println("吃苹果") ;

    }

    }

    public class Test{

    public static void main(String[] args){

    new Apple().eated() ;

    }

    }

    事实上接口也弥补一抽象类的些缺点:比如子类只能继承自一个类.当一个具体类既要成为某个类的子类,又要继承某个抽象类共有的功能时,就会出现矛盾.这时就可以用接口也进行解决!

    希望我说的对你有所帮助!

    展开全文
  • C#抽象类和抽象方法

    2015-12-01 08:21:14
    如果一个类不与具体的事物相联系,而只是表达一种抽象概念,仅仅是作为其派生类的一个基类,这样的类就是抽象类,在抽象类中声明方法时,如果加上abstract时就是抽象方法 1.抽象类概述及声明 抽象类与非抽象...

    如果一个类不与具体的事物相联系,而只是表达一种抽象的概念,仅仅是作为其派生类的一个基类,这样的类就是抽象类,在抽象类中声明方法时,如果加上abstract时就是抽象方法

    1.抽象类概述及声明

    抽象类与非抽象类的主要区别:

    ·抽象类不能直接被实例化

    ·抽象类中可以包含抽象成员,但非抽象类中不可以

    ·抽象类不能被密封

    举个小例子

    public abstract class oneClass

    {

      public int i;

      public void denylau()

      {

      }

    }

    2.抽象方法概述及声明

    声明抽象方法时需注意:·抽象方法必须声明在抽象类中  ·声明抽象方法时,不能使用virtual、static、private修饰符。

    在抽象类中抽象方法不提供实现。

    如:

    public abstract class myTestClass()

    {

      public abstract void method();

    }

    3.抽象类与抽象方法的使用

    直接举例子,讲解例子喽!

    using System;
    using System.Collections.Generic;
    using System.Text;

    namespace _
    {
        public abstract class myClass
        {
            private string id = "";
            private string name = "";
            /// <summary>
            /// 编号属性及实现
            /// </summary>
            public string ID
            {
                get
                {
                    return id;
                }
                set
                {
                    id = value;
                }
            }
            /// <summary>
            /// 姓名属性及实现
            /// </summary>
            public string Name
            {
                get
                {
                    return name;
                }
                set
                {
                    name = value;
                }
            }
            /// <summary>
            /// 抽象方法,用来输出信息
            /// </summary>
            public abstract void ShowInfo();
        }
        public class DriveClass:myClass                     //继承抽象类
        {
            /// <summary>
            /// 重写抽象类中输出信息的方法
            /// </summary>
            public override void ShowInfo()
            {
                Console.WriteLine(ID + " " + Name);
            }
        }
        class Program
        {
            static void Main(string[] args)
            {
                DriveClass driveclass = new DriveClass();   //实例化派生类
                myClass myclass = driveclass;               //使用派生类对象实例化抽象类
                myclass.ID = "BH0001";                      //使用抽象类对象访问抽象类中的编号属性
                myclass.Name = "TM";                        //使用抽象类对象访问抽象类中的姓名属性
                myclass.ShowInfo();                         //使用抽象类对象调用抽象类中的的抽象方法
            }
        }
    }

    上例中通过派生类的对象driveclass来实例化抽象类,然后使用抽象类访问抽象类中的属性及方法。

    上面这个小例子,细心的朋友会发现,怎么抽象类和我们上一篇文章讲的接口差不多吗?那么究竟抽象类和接口存在哪些区别呢?

    Ok,下面就介绍下抽象类和接口的区别喽:

    ·它们的派生类只能继承一个基类,即只能继承一个抽象类,但是可以继承多个接口。

    ·抽象类中可以定义成员的实现,但接口中不可以。

    ·抽象类中包含字段、构造函数、析构函数、静态成员或常量等,接口中不可以。

    ·抽象类中的成员可以私有的(只要不是抽象的)、受保护的、内部的或受保护的内部成员,但接口中的成员必须是公共的。

    PS:抽象类和接口这两种类型用于完全不同的目的。抽象类主要用作对象系列的基类,共享某些主要特性,例如共同的目的和结构。接口则主要用于类,这些类在基础水平上有所不同,但仍然可以完成某些相同的任务。

    展开全文
  • java抽象接口

    2017-03-18 14:13:56
    原文抽象类定义:抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。例子:动物是一个抽象类,包含sleep等抽象方法,猫狗等是动物的一种,...

    原文

    抽象类

    定义:抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。举个例子:动物是一个抽象类,包含sleep等抽象方法,猫狗等是动物的一种,它们可以有自己不同的行为,在继承动物这个抽象类后可以实现属于自己的行为。
    注意点:
    1. 抽象类不能被实例化,实例化的工作应该交由它的子类来完成,它只需要有一个引用即可。
    2. 抽象方法必须由子类来进行重写。
    3. 只要包含一个抽象方法的抽象类,该方法必须要定义成抽象类,不管是否还包含有其他方法。
    4. 抽象类中可以包含具体的方法,当然也可以不包含抽象方法。
    5. 子类中的抽象方法不能与父类的抽象方法同名。
    6. abstract不能与final并列修饰同一个类
    7. abstract 不能与private、static、final或native并列修饰同一个方法


    接口

    定义:接口是一种比抽象类更加抽象的“类”。这里给“类”加引号是我找不到更好的词来表示,但是我们要明确一点就是,接口本身就不是类,从我们不能实例化一个接口就可以看出。如new Runnable();肯定是错误的,我们只能new它的实现类。
    接口是用来建立类与类之间的协议,它所提供的只是一种形式,而没有具体的实现。同时实现该接口的实现类必须要实现该接口的所有方法,通过使用implements关键字,他表示该类在遵循某个或某组特定的接口,同时也表示着“interface只是它的外貌,但是现在需要声明它是如何工作的”。
    接口是抽象类的延伸,java了保证数据安全是不能多重继承的,也就是说继承只能存在一个父类,但是接口不同,一个类可以同时实现多个接口,不管这些接口之间有没有关系,所以接口弥补了抽象类不能多重继承的缺陷,但是推荐继承和接口共同使用,因为这样既可以保证数据安全性又可以实现多重继承。
    注意点:
    1. 个Interface的方所有法访问权限自动被声明为public。确切的说只能为public,当然你可以显示的声明为protected、private,但是编译会出错!
    2. 接口中可以定义“成员变量”,或者说是不可变的常量,因为接口中的“成员变量”会自动变为为public static final。可以通过类命名直接访问:ImplementClass.name。
    3. 接口中不存在实现的方法。
    4. 实现接口的非抽象类必须要实现该接口的所有方法。抽象类可以不用实现。
    5. 不能使用new操作符实例化一个接口,但可以声明一个接口变量,该变量必须引用(refer to)一个实现该接口的类的对象。可以使用 instanceof 检查一个对象是否实现了某个特定的接口。例如:if(anObject instanceof Comparable){}。
    6. 在实现多接口的时候一定要避免方法名的重复。


    抽象类和接口的区别:

    1. 语法层次不同。抽象类既可以有抽象方法,也可以有非抽象方法,接口只能含有抽象方法
    2. 设计层次不同。

      抽象层次不同:抽象类是对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。

      跨域不同:抽象类所跨域的是具有相似特点的类,而接口却可以跨域不同的类。我们知道抽象类是从子类中发现公共部分,然后泛化成抽象类,子类继承该父类即可,但是接口不同。实现它的子类可以不存在任何关系,共同之处。例如猫、狗可以抽象成一个动物类抽象类,具备叫的方法。鸟、飞机可以实现飞Fly接口,具备飞的行为,这里我们总不能将鸟、飞机共用一个父类吧!所以说抽象类所体现的是一种继承关系,要想使得继承关系合理,父类和派生类之间必须存在”is-a” 关系,即父类和派生类在概念本质上应该是相同的。对于接口则不然,并不要求接口的实现者和接口定义在概念本质上是一致的, 仅仅是实现了接口定义的契约而已。

      设计层次不同:对于抽象类而言,它是自下而上来设计的,我们要先知道子类才能抽象出父类,而接口则不同,它根本就不需要知道子类的存在,只需要定义一个规则即可,至于什么子类、什么时候怎么实现它一概不知。比如我们只有一个猫类在这里,如果你这是就抽象成一个动物类,是不是设计有点儿过度?我们起码要有两个动物类,猫、狗在这里,我们在抽象他们的共同点形成动物抽象类吧!所以说抽象类往往都是通过重构而来的!但是接口就不同,比如说飞,我们根本就不知道会有什么东西来实现这个飞接口,怎么实现也不得而知,我们要做的就是事前定义好飞的行为接口。所以说抽象类是自底向上抽象而来的,接口是自顶向下设计出来的。

    为了更好的阐述他们之间的区别,下面将使用一个例子来说明。该例子引自:http://blog.csdn.net/ttgjz/article/details/2960451

    我们有一个door的抽象概念,包含open()和close()两个行为,可以通过抽象类和接口来定义这个抽象概念。

    抽象类

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

    接口

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

    假如现在门需要报警功能alarm(),该怎样实现?
    一、给Door增加一个alarm()

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

    或者

    interface Door{
        void open();
        void close();
        void alarm();
    }

    这种方法违反了面向对象设计中的一个核心原则 ISP (Interface Segregation Principle)。在Door的定义中把Door概念本身固有的行为方法和另外一个概念”报警器”的行为方 法混在了一起。这样引起的一个问题是那些仅仅依赖于Door这个概念的模块会因为”报警器”这个概念的改变而改变,反之依然。

    二、既然open()、close()和alarm()属于两个不同的概念,那么我们依据ISP原则将它们分开定义在两个代表两个不同概念的抽象类里面,定义的方式有三种:
    1、两个都使用抽象类来定义。
    2、两个都使用接口来定义。
    3、一个使用抽象类定义,一个是用接口定义。

    由于java不支持多继承所以第一种是不可行的。后面两种都是可行的,但是选择何种就反映了你对问题域本质的理解。
    如果选择第二种都是接口来定义,那么就反映了两个问题:1、我们可能没有理解清楚问题域,AlarmDoor在概念本质上到底是门还报警器。2、如果我们对问题域的理解没有问题,比如我们在分析时确定了AlarmDoor在本质上概念是一致的,那么我们在设计时就没有正确的反映出我们的设计意图。因为你使用了两个接口来进行定义,他们概念的定义并不能够反映上述含义。
    第三种,如果我们对问题域的理解是这样的:AlarmDoor本质上Door,但同时它也拥有报警的行为功能,这个时候我们使用第三种方案恰好可以阐述我们的设计意图。AlarmDoor本质是们,所以对于这个概念我们使用抽象类来定义,同时AlarmDoor具备报警功能,说明它能够完成报警概念中定义的行为功能,所以alarm可以使用接口来进行定义。如下:

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

    这种实现方式基本上能够明确的反映出我们对于问题领域的理解,正确的揭示我们的设计意图。其实抽象类表示的是”is-a”关系接口表示的是”like-a”关系,大家在选择时可以作为一个依据,当然这是建立在对问题领域的理解上的,比如:如果我们认为AlarmDoor在概念本质上是报警器,同时又具有Door的功能,那么上述的定义方式就要反过来了。
    总结:
    1、 抽象类在java语言中所表示的是一种继承关系,一个子类只能存在一个父类,但是可以存在多个接口。
    2、 在抽象类中可以拥有自己的成员变量和非抽象类方法,但是接口中只能存在静态的不可变的成员数据(不过一般都不在接口中定义成员数据),而且它的所有方法都是抽象的。
    3、抽象类和接口所反映的设计理念是不同的,抽象类所代表的是“is-a”的关系,而接口所代表的是“like-a”的关系。
    抽象类和接口是java语言中两种不同的抽象概念,他们的存在对多态提供了非常好的支持,虽然他们之间存在很大的相似性。但是对于他们的选择往往反应了您对问题域的理解。只有对问题域的本质有良好的理解,才能做出正确、合理的设计。

    展开全文
  • 对于类的理解以及例子 在我看来,类就是对某一类事物的概括,...总的来说,类可以当作一个容器,将具有一定信息的事物总结在一起,并以这个来代表一个新的类,可以当作一个具体的内容,也可以当作一个抽象概念的集合

    对于类的理解以及例子

    在我看来,类就是对某一类事物的概括,这个类可大可小,可以描述各个层次概念的总和,既可以描述生物、机器、自然界,天体和世界等具体的内容事物,也可以描述时间、空间、重量、长度、尺寸等抽象的概念。

    实际存在的具体实物可以使用类来描述,不存在的也可以通过类来进行创建和总结。

    小一点,类可以具体到某一个职业,某一个人,某一台机器,某一段时间,记忆等等。

    总的来说,类可以当作一个容器,将具有一定信息的事物总结在一起,并以这个来代表一个新的类,可以当作一个具体的内容,也可以当作一个抽象概念的集合

    举个栗子 (●ˇ∀ˇ●)

    通俗一点来讲,在正常的项目开发中,我们可以将一个类看作是完成特定功能的人。

    而这个人有自己的名字,出生日期,性别等等信息,这些就是类的成员属性。
    而这个人可以做到的事情,比如写文章,做饭,为他人提供一些特定的服务就是这个类的成员方法。

    对抽象类,继承的理解

    抽象类的可以理解为有传播知识和方法的类似老师一类的人,而这些人愿意教授给其他人的某一种技能和知识就是一个抽象方法,当这些方法被继承类实现的时候就可以理解为学习并掌握了传授的方法,并且继承的人对这些知识和方法有了自己的理解,在代码中也就表现为对抽象方法的自我实现。

    接口以及实现的理解

    因为接口中都是抽象方法或者静态方法,变量也为常量,所以可以理解为是对外开放的学习平台,而实现过程就是我们通过类似于学习平台,书籍,网络等通道学习各种开发的知识和技能,这些知识和技能就可以理解为常量和抽象方法。

    当通过实现类重写了这些对应方法,就是我们通过自己的理解学习到了对应的技能,而常量是作为大家都认可的基本知识大家都认同的科学道理。比如我们规定地图方向为上北下南左西右东,这就是我们都认同的道理,也就是常量。

    多继承,多实现的理解

    多继承在现实生活中可以理解我们一代代的人们对知识,规章制度,生活,工作等技能的一代代传承和改良,其中我们自然少不了抽象类也就是各式各样的老师和领航者为知识的传播做出的努力。

    多实现可以理解为作为我们知识的载体的书籍,学习平台对其他同类的书籍和学习平台上知识的总结和分类,然后成为全新的书籍和学习平台。为我们,类,服务。同样的接口对我们都是开放的,如果私有化了,也就是不给别人看的公开知识也是没有意义的。

    还有一些其他的内容也可以参照这样的理解方式来理解,因为面向对象是从人的一般思维来进行设计的,所以一般的也不会偏离这个打方向。

    展开全文
  • c++类对象基本概念

    2018-09-05 14:02:50
    例子:人是一个类,它是抽象,那什么是对象呢?那就是具体指的哪个人,比如小红、小明,这就是对象,人有外貌特征行为,比如鼻子、耳朵、眼睛 2.代码分析 #include&lt;iostream&gt; #include&...
  • JAVA之抽象

    2020-07-03 19:01:34
    抽象概念 数据抽象为外界提供了仅有的基本信息,在表示基本特征的过程中不包括实现细节。个真实世界的例子,比如 一本书。当你听到是书时,你不知道具体的细节,如页数颜射或者大小,但你明白书的概念、大概模样...
  • 关于具体解析java中的接口和抽象类的,根据资料和个人的理解凑合而成,例子是自己的,可能不太恰当,错误难免,望高手指正。 在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是并不是所有的类...
  •  首先,在这个造人的思想里面,有几个重要的角色:女娲本身、抽象的人的概念和女娲所造出的一个个具体的人。  1.)女娲是一个工厂类,也就是简单工厂模式的核心角色。  2.)具休的一个个的人,包
  • 1、抽象类定义:在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。定义真抽象,一遍...
  • 面向对象基本概念

    2020-11-29 22:03:54
    1.类与对象的关系,例子 类:具有相同属性的一类事物 对象:对某一类具体的描述,对象是类的实例 人类是类,小明是一个人,小明是人类的实例 > 类是一个抽象概念,它不存在于现实中的时间/空间里,类只是为...
  • 数据库的基本概念

    2013-08-17 17:13:49
    学习数据库常常被里面的大量概念搞得头昏脑涨,原因是这些概念太过抽象又比较复杂。经过几个月对数据库的大量操作使用又看了一些学习视频,终于对数据库这些概念有了比较深入的认识,特此... 例子:上面列举的
  • 具体举例子,文件 foo.txt 可以同时在目录/home/greg /home/other 中存在,但在同一个目录中不能存在两个 foo.txt 文件。另外,在目录 /home/greg 外访问 foo.txt 文件时,我们必须将目录名以及目录分隔符放在...
  • 一种商品需要用多个产品组成就需要运用抽象工厂模式。...客户端:使用抽象工厂和抽象产品类声明的唯一接口 如下图所示:抽象工厂UML图 例子:车与零件 车有许许多多的零件part组成:...
  • 抽象类与接口详解

    2020-06-10 19:27:51
    在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。 例子:现在有Person,Student...
  • 十、JAVA抽象类的定义使用

    千次阅读 2018-04-26 20:43:57
    抽象类的基本概念 抽象方法,只声明而未实现的方法我们称为...抽象方法可以只声明,而不需要方法体,具体的方法体可以子类继承后在写,这样就会变得十分方便例子代码演示:package demo; public abstract clas...
  • PHP命名空间概念解析

    2015-01-22 08:41:00
     什么是命名空间?“从广义上来说,命名空间是一种封装事物的方法。...具体举例子,文件foo.txt可以同时在目录/home/greg/home/other中存在,但在同一个目录中不能存在两个foo.txt文件。另外,在目录...
  • 说说PHP中的命名空间相关概念

    千次阅读 2015-07-23 09:53:03
    ... ...“从广义上来说,命名空间是一种封装事物的方法。在很多地方都可以见到这种抽象概念。...具体举例子,文件 foo.txt 可以同时在目录/home/greg /home/other 中存在,但在同一个目录中不能
  • 抽象类与接口

    热门讨论 2014-04-28 21:24:07
    一、抽象类 在面向对象的概念中,所有的对象都是...例子,“水果”是个抽象类,指可以食用的植物果实种子,有水分糖分,但世界上不存在“水果”这个实实在在的东西,它只是一个定义。“苹果”、“香蕉”、
  • 是指位于不同产品等级结构中功能相关联的产品组成的家族,抽象工厂模式所提供的一系列产品就组成一个产品族,而产品等级的概念,其实就是一个具体产品,简单的来区分产品族产品等级,就是产品族是抽象的,而产品...
  • 我们例子来说明:现在有一个场景,就是需要访问两个数据库(SqlserverAccess),当需要从其中一个数据库更换成另外一个的时候,如何更好 解除客户端数据库访问的耦合,假设数据库中有一张User表. ...
  • 在了解抽象工厂模式之前,我们必须先了解一个概念产品族。所谓的产品族:是指位于不同产品等级结构中,功能相关联的产品组成的家族。 例子:在肥宅心中除了快乐水最喜欢的就是动漫了。 在上面的图中,热血番...
  • Java中的简单工厂模式 两个例子以快速明白Java中的简单工厂... 首先,在这个造人的思想里面,有几个重要的角色:女娲本身、抽象的人的概念和女娲所造出的一个个具体的人。  1.)女娲是一个工厂类,也就是简单工...

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 214
精华内容 85
关键字:

具体概念和抽象概念举例子