精华内容
下载资源
问答
  • 接口和抽象类的概念不一样。接口是对动作的抽象抽象类是对根源的抽象抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。比如,男人,女人,这两个类(如果是类的话……),他们的抽象类是人。说明...

    1、这里我们来参考一下博文。

    接口和抽象类有什么区别

    你选择使用接口和抽象类的依据是什么?

    接口和抽象类的概念不一样。接口是对动作的抽象,抽象类是对根源的抽象。

    抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。

    比如,男人,女人,这两个类(如果是类的话……),他们的抽象类是人。说明,他们都是人。

    人可以吃东西,狗也可以吃东西,你可以把“吃东西”定义成一个接口,然后让这些类去实现它.

    所以,在高级语言上,一个类只能继承一个类(抽象类)(正如人不可能同时是生物和非生物),但是可以实现多个接口(吃饭接口、走路接口)。

    第一点. 接口是抽象类的变体,接口中所有的方法都是抽象的。而抽象类是声明方法的存在而不去实现它的类。

    第二点. 接口可以多继承,抽象类不行

    第三点. 接口定义方法,不能实现,而抽象类可以实现部分方法。

    第四点. 接口中基本数据类型为static 而抽类象不是的。//在实际的操作中不需要显示申明为final,如果成员方法被默认修饰,默认为public static修饰,如果成员变量被默认修饰,其修饰为public static final类型。

    当你关注一个事物的本质的时候,用抽象类;当你关注一个操作的时候,用接口。

    抽象类的功能要远超过接口,但是,定义抽象类的代价高。因为高级语言来说(从实际设计上来说也是)每个类只能继承一个类。在这个类中,你必须继承或编写出其所有子类的

    所有共性。虽然接口在功能上会弱化许多,但是它只是针对一个动作的描述。而且你可以在一个类中同时实现多个接口。在设计阶段会降低难度的。

    2、我个人对接口和抽象类的理解 代码上来。

    这里我首先定义两个接口,Interface1,interface2,interface3,interface4

    package com.yuan.test;

    public interface Interface1 {

    public String abc="1123";//实际上你可以定义string,或者说你不必要申明为final static 因为它在接口当中,么有方法,所以不可以赋值或者修改。

    //public final static String abc="1123";

    public void abc();

    }

    package com.yuan.test;

    public interface Interface3 {

    public void abcde();

    }

    package com.yuan.test;

    public interface Interface2 extends Interface1,Interface3 {

    public void abcd();

    }

    package com.yuan.test;

    public interface Interface4 {

    public void abcdef();

    }

    /***抽象类以及抽象的方法**/

    package com.yuan.test;

    public abstract class AbstractTest {

    public void ab1(){} //如果不说明为抽象的方法,必须要加上方法体

    public void ab2() {}如果不说明为抽象的方法,必须要加上方法体

    public abstract void ab3();//如果声明为抽象的方法,不需要方法体

    }

    说明:

    从Interface2可以看出,接口可以继承多个接口。也就是接口可以多继承。但是抽象类继承只可以继承一个。

    我有另外一个问题是,接口除了可以继承接口之外,可以继承抽象类吗??答案是不可以的。原因为注释

    package com.yuan.test;

    //The type AbstractTest cannot be a superinterface of Interface1;

    // a superinterface must be an interface

    public interface Interface1 extends AbstractTest{

    public void abc();

    }

    /********总结一点,就是接口可以被接口继承,然后可以被抽象类实现,另外接口不可以实例化,但可以通过子类的引用指向它******/

    package com.yuan.test;

    public class TestInterface extends Counter implements Interface2,Interface4{

    public static void main(String[] args){

    Interface1 i1=new TestInterface();//通过子类的引用指向接口。

    System.out.println("i1:"+i1.abc);

    }

    @Override

    public void abc() {

    // TODO Auto-generated method stu

    }

    @Override

    public void abcd() {

    // TODO Auto-generated method stub

    }

    @Override

    public void abcde() {

    // TODO Auto-generated method stub

    }

    @Override

    public void abcdef() {

    // TODO Auto-generated method stub

    }

    }

    展开全文
  • 怎样理解对象?

    千次阅读 2018-08-01 11:28:59
    它只是我们从现实世界中抽象出来的一种模型,但是这个模型还是有它的定义和概念的。   1、对象的英文单词是“Object”,它有三个方面的意思: (1)目标,目的,宗旨 (2)物,物体,物件 (3)对象,客体,客观 ...

    一、万事万物皆对象--理解对象模型
    对象实际上是看待事物的一种方式。它只是我们从现实世界中抽象出来的一种模型,但是这个模型还是有它的定义和概念的。

     

    1、对象的英文单词是“Object”,它有三个方面的意思:
    (1)目标,目的,宗旨
    (2)物,物体,物件
    (3)对象,客体,客观


        仔细琢磨下这三个意思。首先它有“目标”的意思,也就是说这是个实际的东西,我们可以对它做些操作,它是一些动作的受体。其次就是第二层意思,它是物体、物件,现实世界中的任何实际事物或称为“实体”的东西都可以叫作“Object”.第三层含义是哲学上的一个概念,比前两层含义都要抽象,这也是我们所取的“Object”的意思,它就是指一种客观事物的存在,如桌子、人、狗、鱼,蓝天,白云……

     


        对象是件“东西”,什么“东西”都可以称之为对象;你可以对一个对象施加作用(属性->特性),对象会发生一些事件(变化->方法)

     

    2、现实世界中一些具体的对象

        举个栗子,比如一台笔记本电脑,我们将它视为一个对象无非是为了能够更加抽象地描述它,这在编程的过程中很重要,来看看它有哪些需要抽象出来的特性吧~
        在生活中大家应该很熟悉,当你在买一台新的笔记本电脑时,主要考虑的是什么?———笔记本电脑的屏幕大小、屏幕形状、机身总重量、硬盘空间、CPU频率、操作系统……这些都是“笔记本电脑”这个对象所固有的一些性能或制造的参数,这些可以标识出这台笔记本电脑是否受到顾客的欢迎。
        但是,对于现实世界中的一台洗衣机,要考虑的特性就完全不是上面的那些参数和特性了,更多的是会去关注它的容积、耗电量、噪音大小等。还有,对于一架航天飞机,它要考虑的特性会更多,对于一支钢笔,一把伞,针对它们要考虑的就会相对要少一些……从这些例子来看,世间万物的复杂程度不同,我们对它们的关心方面就不同,相应地从它们这些具体事物中抽象出的对象也会各有差别。

     

    3、由现实世界中的事物抽象为对象


        来看看下面这张图,图中列出了3种类型的电脑,以及我们对3个“对象”所关注的特性。相对而言,对于台式机更注重性能,不会关心它的重量,因为它不是为了方便移动而设计的。而对于平板电脑呢,相比较台式电脑而言,没有那么关心它的性能,而是看它是否方便携带及电池的续航能力。而笔记本电脑,考虑因素就处于这两者之间。
        这个例子,向大家说明了如何将现实世界中的各种事物抽象为一个个对象。做法很简单,只要它是一个独立的事物,找出所关注的那几个方面的特性,把这些特性提取出来,就得到了一个抽象之后的“对象”。

     

     

    4、对象之间的差别--事物的属性
        (1)何为对象的属性?
      只知道什么是对象还不行,世界上有无穷多种事物,它们各有特点,互不相同。必须有个办法将我们抽象出的对象互相区分出来才行,这样才能够真实地对现实世界中的事物进行合理的建模与抽象。这个用于区分各个对象特征的部分就称为属性,不同的对象具有不同的属性,借属性这个概念来使各个对象能够得以区分。


        (2)不同对象的属性值不同
        举个例子,如果发现两个笔记本电脑对象的屏幕尺寸大小不同,则它们必然不是同一个对象。
        


        (3)不同对象具有不同的属性
        举个例子,笔记本电脑和平板电脑,其中屏幕大小是两者都有的一个共同属性。它们也具有不同的属性,笔记本电脑的键盘属性,平板电脑的触摸板的属性,等等。

     

        (4)属性与对象间的关系
        举个例子,三角形与正方形都有一个共同的属性--边长。圆形是不具有边长的,只有名称为“直径”的属性。三角形与正方形虽然都具有“边长”,但边长的值并不相同,另外,我们也知道三角形与正方形,边长对它们的一些其他的特性,如周长、面积等的含义是不同的。这些均代表了不同的对象之间属性的关系,可能具有不同的属性或者不同的属性值。

     


      

     

    5、对象与属性的关系
        对于任何一个属性都具有三个方面:属性所属的对象、属性名称、属性的值。只有这三个方面都是相同的,才能判定这两个属性实际上属于同一个。比如,两台笔记本电脑的屏幕大小都是14寸,这才说明“屏幕大小”这个属性是属于同一个。

     


    二、万物皆有变化——对象的方法
    对象是由现实中的事物抽象而来的。我们知道世界上亘古不变的事物几乎是没有的。世间万物都处在不断变化中,当所要关注的对象发生变化时,就必须要有一种相应的办法来描述并反映对象的这个变化的过程和想象。

     

    1、对象的方法定义
        属性只是固定的、没有变化的对象特征而已。但现实世界中的事物都处在不断发展变化中,必须有某种方式来描述这种变化。所以就有了“方法”,它所描述的是对象可以发起的动作,或者是对象可以做的事情等。
       (1)什么是方法?
        举个例子,将一只猫抽象为一个对象——Cat。对于这个对象,我们现在只关注它所拥有的其中一个属性——体重(Weight)。猫能吃老鼠,这样Cat对象就会有一个方法——EatMouse().用这个方法表示猫吃老鼠这个变化过程,在这个过程的前后猫的体重会有所变化。反映到我们抽象后的对象中,就是这个事实,Cat在执行EatMouse()这个方法之后,属性Weight的值发生了变化,这就是对象的变化——方法。
        事实上,方法的定义是这样说的:它是相应的对象可以做的、但不一定会真正去做的事情。从这个定义上来看,上面的EatMouse()方法是为Cat对象所有的,如果在定义一个对象——狗(Dog),那么它就不可以拥有EatMouse()方法。

     

    2、方法与对象间的关系

        不同的对象所拥有的方法可能不一样,但方法并不是一个对象所专属的事情。

        如下图:

     

     

     

     

     

     

     

    展开全文
  • 怎样理解回调函数?

    2018-10-03 16:28:29
    为某种抽象概念起个术语,可明确意识到此概念的存在,有助于学习理解。但理解后思考,可以不用太关心术语。不同场合,同一个概念往往有不同术语。 再将回调的概念泛化,比如某人同时关心 A, B, C, D, E, F 事件,...

    如果写程序是调用系统的API,那么把关系反过来,你写一个函数,让系统调用你的函数,那就是回调了,那个被系统调用的函数就是回调函数。

    为某种抽象概念起个术语,可明确意识到此概念的存在,有助于学习理解。但理解后思考,可以不用太关心术语。不同场合,同一个概念往往有不同术语。

    再将回调的概念泛化,比如某人同时关心 A, B, C, D, E, F 事件,并且这些事件是一组的,比如敲键盘,鼠标移动,鼠标点击等一组。将一组事件结合起来。java语言就映射成接口,接口有 N 个函数。c语言就映射成一个结构,里面放着 N 个函数指针。跟着就不是将单个函数指针传进去,而是将接口,或者函数指针的结构传进去。

     

     

    展开全文
  • 而在Java中最能体现出OOP思想的就是“接口和抽象类”,两者的概念有很多相同的地方,从设计角度来说,二者的定位甚至都是一样的,皆是“将设计和实现彻底分离”;但是二者却是截然不同的,具体怎样,且让我一 一道来...

    前言

    在很多老版的书籍或资料当中,“抽象”被作为OOP(面向对象编程)四大特征之一;而在Java中最能体现出OOP思想的就是“接口和抽象类”,两者的概念有很多相同的地方,从设计方向来说,二者的定位甚至都是一样的,皆是“将设计和实现彻底分离”;但是二者却又是截然不同的;

    抽象类(abstract)

    在了解抽象类之前,我们先来认识一下抽象方法,何为抽象方法,即声明的方法只有方法体,没有方法块;而抽象类即,如果这个方法被声明为抽象方法,那方法对应的类一定要是抽象类;
    通过抽象类,我们可以避免子类设计的随意性;严格的限制了子类的设计,目的是要让子类更加通用;

    声明

    通过abstract 关键字

    public abstract class TestAbstract {
    	abstract void run();
    }
    

    我们再来分析下面一段代码:

    public abstract class TestAbstract {
    	abstract void run();
    	
    	public void eat(){
    		System.out.println("吃饭");
    	}
    	
    	public String eye;
    	
    	public TestAbstract(){
    		
    	}
    }
    

    从以上的代码片段我们可以得出结论:
    1:抽象类需要被继承(否则声明的抽象方法无法被实现);且子类强制性重写父类抽象方法;
    2:包含抽象方法的,一定是抽象类(想都不用想)
    3:抽象类不能实例化(不能new 对象)
    4:抽象类中可以定义普通方法、属性、构造方法、static初始化块等
    需要说明一点:抽象类中的构造方法只能被子类调用(通过多态的方式,父类引用指向子类对象)
    抽象类的意义所在:
    将设计和实现彻底分离;

    接口(interface)

    “接口”,我们通俗点来理解就是比抽象类还要“抽象”的“抽象类” (最抽象);因此对于接口的定义大致和抽象类相同;

    声明

    public interface TestInteferface {
    	public final Integer MAX_SPEED = 120;
    	
    	void run();
    	
    	void speed(int a , String b);
    }
    

    我们可以得出结论:
    1:接口中只能有常量和方法体(java8新增默认方法和静态方法、java9 新增只有接口自己能调用的私有方法);
    2:接口不能被实例化;
    3:实现类必须要实现接口中所有的方法;
    4:一个类可实现多个接口;
    5:接口中所有的访问修饰符都被隐式修饰为public;
    6:接口支持多继承;(如下代码)

    public interface TestInteferface {
    	void a();
    }
    
    interface TestInteferface1{
    	void b();
    }
    
    interface TestInteferface2 extends TestInteferface,TestInteferface1{
    	void c();
    	//该接口继承了TestInteferface,TestInteferface1,因此实现TestInteferface2 
    	//将要实现a/b/c三个方法;
    }
    

    接口的意义所在:
    将设计和实现彻底分离;(比抽象类更加彻底)

    接口同抽象类的区别及共同点

    区别

    一:从语法上来说:

    1:接口中只能声明常量和抽象方法;而抽象类中可以定义普通方法、属性、构造方法、static初始化块等;
    2:接口中所有成员的访问修饰符都必须是public;抽象类中除了定义的抽象方法,其他成员可随意;(指编译不报错)
    3:抽象类只能单继承;接口可多继承;

    二:从设计角度来说:

    1: 抽象层次不同

    抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。

    2:跨域不同

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

    3:设计层次不同

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

    共同点

    上面说的很清楚:将设计和实现彻底分离;(接口比抽象类更加彻底)

    展开全文
  • 作为一个刚刚入门python的小白,对于类这个概念很是不理解,什么时候应该定义类,以及这个类有什么作用呢?归纳总结如下:类(class):类是对现实生活中一类具有共同特征的事物的抽象。参考代码:# 定义“人”类...
  • 不管怎样,以太坊核心协议的周期性开发已经重新启动,Homestead阶段很快就要到来,我们也已经悄悄开始开发一个概念原型(PoC),目标是开发路线图中最大的里程碑: Serenity.Serenity会有两大主要特性:深度抽象,一个...
  • 因为“同类事物”这个概念是相对的,它因为粒度视图不同而不同。 二. 为什么要使用接口?而不是直接实现呢? 接口的使用并非总是从设计的角度来考虑。接口和python其他语法现象一样,共同构成了python整个语言体系...
  • 当中本聪在2009年1月启动比特币区块链时,他同时向世界引入了两种未经测试的革命性的新概念。第一种就是比特币...现在,开发者们的注意力开始迅速地转向比特币技术的第二部分,区块链怎样应用于货币以外的领域。
  • 理解 Serenity,Part-1:深度抽象

    万次阅读 2019-03-29 09:39:38
    Origin postby Vitalik Buterin, on December 24th, 2015 ...不管怎样,以太坊核心协议的周期性开发已经重新启动,Homestead阶段很快就要到来,我们也已经悄悄开始开发一个概念原型(PoC),目标是...
  • 在Linux中所以的资源,外设都抽象成了文件,所以就有了Linux中“一切皆文件”的特性。当然有文件,肯定是不够的,总不能把所有的文件放在一起管理,实在是太乱,不易管理维护。Linux就引入了目录的概念,在Windows中...
  • 在Linux中所以的资源,外设都抽象成了文件,所以就有了Linux中“一切皆文件”的特性。当然有文件,肯定是不够的,总不能把所有的文件放在一起管理,实在是太乱,不易管理维护。Linux就引入了目录的概念,在Windows中...
  • Origin post by Vitalik Buterin, on December 24th, 2015 我们已经公开继续改进...不管怎样,以太坊核心协议的周期性开发已经重新启动,Homestead阶段很快就要到来,我们也已经悄悄开始开发一个概念原型(PoC),目
  • java类 java类分为普通类和抽象类,接口,上一节我大概讲了java类的一般格式,今天将抽象类和接口。同时讲一下它们是怎样... 抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,
  • java类  java类分为普通类和抽象类,接口,上一节我大概讲了java类的一般格式,今天将抽象类和接口。同时讲一下它们是怎样存储的。... 抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对...
  • java类java类分为普通类和抽象类,接口,上一节我大概讲了java类的一般格式,今天将抽象类...解析:抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念...
  • 这里说对象,而不说类,是因为我们总是先发现了对象,然后抽象出类的。绝不是相反的,不然很别扭,很不...那么两者的关系呢,个人理解从对象抽象出类,从类具象化为对象。在代码层面上先发现对象,然后定义类,然...
  • 我们知道,java中有类,父类,抽象类,接口这些概念,而设计模式的六大原则就解释了它们及其它们之间的关系是怎样的,接下来我们将由简到难一一剖析。 开闭原则:是总纲,他告诉我们要对扩展开放,对修改关闭。即...
  • 该书的前8章首次提出编程领域中的一些十分有用的抽象概念,如过程抽象、迭代抽象以及最重要的数据抽象等。此外,本书通过大量的例子,用非形式化的规范来详细定义这些数据抽象,描述模块所需完成的任务,并定义了...
  • 用OO的思想去理解,所有的衣柜(具体工厂)都是衣柜类的(抽象工厂)某一个,而每一件成套的衣服又包括具体的上衣(某一具体产品),裤子(某一具体产品),这些具体的上衣其实也都是上衣(抽象产品),具体的裤子也...
  • ext基础概念

    2012-08-21 17:37:05
    一、理解Html DOM、Ext Element及Component 它们分别一层一层向高处抽象。 不管怎样,EXT代码都是最后以HTML代码形式呈现给浏览器的,而每一个HTML页面都有一个层次分明的DOM树模型,浏览器中的所有内容都有相应的...
  • 信息熵的理解

    2019-08-23 11:32:16
    信息是我们一直在谈论的东西,但信息这个概念本身依然比较抽象。在百度百科中的定义:信息,泛指人类社会传播的一切内容,指音讯、消息、通信系统传输和处理的对象。 但信息可不可以被量化,怎样量化?答案当然是有...
  • 由于自己在写这一部分的报告时,总感觉不能很好地理解概念含义,具体的设计目标也不知道用怎样的形式来表达。在做完相关报告之后,想着把老师指导之后改正的作业展示一下,希望可以给有类似问题的小伙伴一点点帮助。...
  • 比如粒子滤波,论文中肯定要阐述粒子滤波的基本理论,这些理论即使看中文也很难看懂,更不用说英文了,论文中关键点就是实际应用中的那部分,一般是看中文的理论+中英文的实际应用,看...在应用中去理解抽象概念。...
  • IDEA下java程序怎样调试

    千次阅读 2018-06-01 09:19:36
    而且调试工具也是一个非常好的学习工具,能让我们更好的观察运行过程和中间结果,这对于初学者理解有部分抽象概念非常有好处。错误类型(1)语法错误指的是代码不符合语法规定。编译器会提示相应的错误(错在哪里,...
  • 进程就是运行中的程序,但这个概念抽象的,我们应该更深入、更具体的学习进程在学习进程之前,我们首先应该对操作系统有一个初步的了解任何计算机系统都包含一个基本的程序集合,称为操作系统(Operator System),...
  • 进程就是运行中的程序,但这个概念抽象的,我们应该更深入、更具体的学习进程在学习进程之前,我们首先应该对操作系统有一个初步的了解任何计算机系统都包含一个基本的程序集合,称为操作系统(Operator System),...
  • 力是初中阶段比较抽象概念,力是物体之间的相互作用,初中生会觉得比较绕口,不容易理解,我们在讲解时要慢慢来,理解物理概念不是急就办好的事情我们从这几个角度:力的作用效果力的相互性力的三要素三个方面来...
  • 我们知道java是一门面向对象的编程语言,java中的类是程序员用来表达一个具体问题的抽象的,那么Class类其实就可以简单理解为表达java中的类的共同特点的一个抽象。在深入这个问题之前不妨先再次明确一下类与对象...

空空如也

空空如也

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

怎样理解抽象概念