精华内容
下载资源
问答
  • 面向对象具有哪些特性以及对这些特性的理解

    具有的特性和理解:

    继承:继承是从已有类得到继承信息创建新类的过程,提供继承信息的类被称为父类(超类,基类);得到继承信息的类被称为子类(派生类).继承让变化中的软件系统有了一定的延展性,同时继承也是封装程序中可变因素的重要手段.

    封装:通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口,面向对象的本质就是讲实现的世界描述成一系列完全自治,封闭的对象.我们在类中编写的方法就是对现实细节的一种的一种封装;我们编写一个类就是对数据和数据操作的封装,可以说,封装就是隐藏一切可隐藏的东西,只向外界提供最简单的编程接口.

    多态性:多态性是指允许不通子类型的对象对同一消息作出不同的响应,简单的说就是用同样的对象引用调用同样的方法但是做不了不同的事,多态性分为编译时的多态性和运行时的多态性.如果将对象的方法视为对象向外界提供服务,那么运行的多态性可以理解为:当A系统访问B系统提供的服务时, B系统有多重提供服务的方式,但一切对A系统来说都是透明的.方法重载(overload)实现的是编译时的多态性(也称为前绑定),而方法重写(override)实现是运行时的多态性(也称为后绑定).运行时的多态是面向对象最精髓的东西,要实现多态需要做两件事情:1.方法重写(子类继承父类并重写父类中已有的或抽象的方法);2.对象造型(用父类引用子类型对象,这样同样的引用调用同样的方法就会根据子类对象的不同而表现出不同的行为)

    抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面,抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么.

    展开全文
  • 需求分析:使用javascript时,难免会用到复杂数据结构,当通过定义对象和方法无法解决问题时,就要考虑使用面向对象的方法 困难:js不支持类定义,也就是说我们无法通过定义一个类来封装我们想要属性和方法,可以直接...

    需求分析:使用javascript时,难免会用到复杂的数据结构,当通过定义对象和方法无法解决问题时,就要考虑使用面向对象的方法

    困难:js不支持类的定义,也就是说我们无法通过定义一个类来封装我们想要的属性和方法,可以直接定义一个对象而无需构造函数.

    变通:对象中可以任意存放属性和方法,那么就可以使用对象来模拟出类

    在使用js的时候,想必大家都是用过类似于以下形式的方式来为设置对象:

    var myObj={};
    myObj.key = "value";
    myObj.func = function(key,value){
    	
    		myObj.key = value;
    	
    }
    
    
    以上代码我们就定义了一个对象myObj,并且为其定义了一个属性key值为value,定义了一个方法function,然后我们可以做一下测试:

    myObj.func("key","value2");
    alert(myObj.key);

    结果是什么呢?value2

    可以看到我们成功定义了一个对象的属性和方法,并通过方法修改了对象的属性.但这里有一个很大的缺点,这个对象只能"自我陶醉",无法像如果需要另外定义一个对象,赋予相同的属性和方法,就需要重复以上的步骤.而面向对象中,类和对象的区别就在于,类是对象的模板,可以使用构造方法来定义一系列具有相同属性和方法的对象.那么模仿面向对象,我们作如下改进:

    function myObj(key,value){
    	this.key = key;
    	this.value = value;
    	this.func = function(key){
    		if(this.key ==key ){
    			return this.value;
    		}else{
    			return null;
    		}
    	}
    }
    该方式是基于定义方法的模式来模拟一个类,那么该如何来使用呢?

    var obj = new  myObj("key","value");
    alert(obj.func("key"));
    看一看是不是特别像java里面的,定义一个类,然后使用构造方法定义对象,之后调用get方法返回value;

    在这里有必要说一下:myObj相当于类名,myObj(key,value)相当于构造方法,只是融为一体了.使用this修饰的属性或方法都是public类型的,定义完以后可以通过对象访问.

    如果需要定义私有的属性,可以使用var来修饰.

    这个方法是我目前最常用的方式.
    然而如果想要使用更多的面向对象的特性,比如继承,多态,可以用更好的办法来定义类.

    使用"构造函数法"最大的问题是创建对象时需要用new来创建,这样的方式虽然好用,却是一种浪费内存的行为,也就是说,每创建一个对象,所有的属性和方法都会重新分配内存,其实使用js模拟类时毕竟不是真正的类,有些属性和方法都可以是公用的,这让我们想到了java的单例模式和静态变量.

    javascript规定,所有的构造函数都有一个属性,prototype指向另一个对象,该对象下的所有属性和方法都会被构造函数继承,也就是说所有的static 的属性和方法我们可以定义在prototype上面,例如:

    function myObj(key,value){
    	this.key = key;
    	this.value = value;
    	this.func = function(key){
    		if(this.key ==key ){
    			return this.value;
    		}else{
    			return null;
    		}
    	}
    }
    myObj.prototype.type = "staticType";
    myObj.prototype.get = function(){}

    这样无论创建多少个对象,他们拥有的属性type和方法get都是共享的了。

    使用this和prototype时会把代码的结构搞的有些混乱,那些对js不是非常熟练的同学们就无法读懂和使用这些代码,那么怎么样进行改进让我们更易使用呢?

    这里推荐一种极简主义方法,也就是抛弃this和prototype关键字,模仿单例模式创建对象。

    例如:要创建一个Animal类:

    var Animal={
        getInstance:function(){
    	var animal = {};
    	animal.name="凯特";
    	animal.run = function(){
    		alert("100km/h");
    	}; 
    	return animal;
        }
    };


    原理很简单,对象里面定义了一个方法属性getInstance,该方法就是我们在java中常见的单例模式,也可以理解为工厂模式。如果想要创建对象,就去调用构造方法:

    var a = Animal.getInstance();
    a.run();
    Animal跟类十分相似吧,getInstance就是个静态方法。

    面向对象封装性已经说过了,以下说一说继承

    再定义一个类(对象):

    var Cat = {
    	
        getInstance:function(){
    	var cat= Animal.getInstance();
    	cat.name="kite";
    	cat.catchMouse = function(){
    	    alert("can do");
    	}; 
    	return cat;
        }
    };
    类Cat拥有一个相同的构造方法getInstance,只是Cat创建对象的时候是用Animal为模板创建的,再加上自己的属性和方法,就实现了继承,测试一下:

    var cat1 = Cat.getInstance();
    cat1.run();
    cat1.catchMouse();
    可以证明,我们确实可以调用run()和catchMouse()也就是说继承的问题得到解决了,那么多态呢?子类是否能够覆盖父类的方法呢,子类的属性能否重写父类的属性呢?

    继续测试:

    alert(cat1.name);
    可以得出结论,cat1.name的值已经被替换了,至于方法当然也是这般。下面我们需要考虑一个问题,如何获得共享的属性,就像Java里面的static属性一样(java中的static变量属于类变量,不提倡通过对象调用,但可以调用,所有的对象调用都是同一状态),我们该怎么做呢?

    var Cat = {
    	legNum:4,
        getInstance:function(){
    	var cat= Animal.getInstance();
    	cat.name="kite";
    	cat.catchMouse = function(){
    	    alert("can do");
    	}; 
    	cat.getLegNum = function(){
    		cat.legNum = Cat.legNum;
    	}
    	cat.changeLegNum = function(legNum){
    		Cat.legNum = legNum;
    	}
    	return cat;
        }
    };



    测试一下legNum属性是不是共享的:

    var cat1 = Cat.getInstance();
    var cat2 = Cat.getInstance();
    alert(cat1.getLegNum()==cat2.getLegNum());
    cat1.changeLegNum(3);
    alert(cat1.getLegNum()==cat2.getLegNum());
    可以看到两次打印出来的结果都是true,数据已经实现了共享,要注意,共享变量时依附于类的,在实现数据共享的过程中,要获得类的变量,修改变量也是最终实现类变量的修改。





    展开全文
  • 有个对象具有唯一列id,还有计数列count,想合并集合中id相同值,并计算count,对象如下: @Getter @Setter public class UserKeyword { private String id; private Integer keywordId; private String...

    有个对象,具有唯一列id,还有计数列count,想合并集合中的id相同的值,并计算count,对象如下:

    @Getter
    @Setter
    public class UserKeyword {
    
        private String id;
    
        private Integer keywordId;
    
        private String keywordName;
    
        private Long userId;
    
        private Integer count;
    
        private BigDecimal weight;
    
    }
    

    做法一:

     Map<String, UserKeyword> map=new HashMap<>();
     list.forEach(o->{
          String key=o.getId();
          UserKeyword userKeyword = map.get(key);
          if (!Objects.isNull(userKeyword)) {
              o.setCount(o.getCount() + userKeyword.getCount());
          }
          map.put(key,o);
      });
    list=new ArrayList<>(map.values());
    

    这个好理解,利用map的key唯一特性,遇到重复的更新
    做法二:

    list=list(Collectors.toList()).stream().collect(Collectors.toMap(UserKeyword::getId, a -> a, (o1, o2) -> {
                o1.setCount(o1.getCount() + o2.getCount());
                return o1;
     })).values())
    

    自己测试

    展开全文
  • 面向对象的四大特性

    2017-05-19 18:53:31
    题目: 面向对象具有抽象、封装、多态、继承四大特性。记牢!!!

    题目:题目


    面向对象具有抽象、封装、多态、继承四大特性。记牢!!!



    展开全文
  • 主要介绍了C#面相对象编程中的类与对象的特性与概念,OOP面向对象语言相对C语言这样面相过程的语言来说具有类和对象以及方法这样的特性,需要的朋友可以参考下
  • 面对对象的四大特性

    2011-10-21 23:22:20
    对象的一个新类可以从现有的类中派生,这个过程称为类继承,新类继承了原始类的特性,新类称为 原始类的派生类(子类),而原始类称为新类的基类(父类),派生类可以从它的基类哪里继承方法 和实例变量,并且类可以...
  • 今天小编就为大家分享一篇关于面向对象三大特性的意义讲解,小编觉得内容挺不错,现在分享给大家,具有很好参考价值,需要朋友一起跟随小编来看看吧
  • JAVA面向对象的三大特性每一对象是其状态和行为封装。类是按一定体系和层次安排,使得子类可以从超类继承行为。在这个类层次体系中有一个根类,它是具有一般行为类。Java程序是用类来组织。下面是小编整理...
  • Javascript是一种面向对象的脚本语言,其也具有面向对象的三大特性,但是今天我们不详细讲解javascript面向对象特性,今天我们简单了解一下javascript面向对象特性,然后学习一下怎样实现试用期限制!
  • 面向对象的基本特性

    2014-12-17 17:16:53
    找出事物共性,并把具有共性事物划为一类,得到一个抽象概念。  封装:把对象的属性和行为结合成一个独立单位,并尽可能隐藏对象的内部细节。  继承:指特殊类的对象拥有其一般类属性和行为...
  • javascript 的面向对象... 1 面向对象的特性 类,成员变量,成员函数,类变量,类方法,继承,多态 1) 类 类的定义:function Circle(r) { this.r = r; } 类的实例化: c = Circle(3); 2)成员变量 成员
  • JavaScript虽然不是面向对象的编程语言但具有很多面向对象的特性。 1.面向对象开发  a)对象的创建 var obj=newObject(); 对象的创建需要构造函数:内置函数使用内置的构造函数来创建;自定义的对象用自定义...
  • 不同层次上面向对象软件的特性,刘婧,刘斌,理解软件的特性,特别是好的软件具有什么特性是软件方法学和设计原则研究的关键问题.软件是由不同层次组件构成的复杂事物. 了解软
  • 一、大家都知道,面向对象语言有一个标志,那就是他们都有类概念,通过类我们可以创建任意多个具有相同属性和方法的对象。但ECMAScript(指定JavaScript标准机构,也就是说JavaScript是实现其标准扩展)并没有类...
  • 面向对象三大特性 ...对象具有变化状态。 对象具有唯一性。 对象都是某个类别实例。 一切皆为对象,真实世界中所有事物都可以视为对象。 类时对象类型,对象是类实例 1.封装 什么是封装: 封转是指属性
  • JS中基于对象语言的特性

    千次阅读 2018-05-23 19:16:52
    主流编程语言中,以C语言为代表面向过程类型语言,和以C++(Java)等为代表面向对象...1.继承性:通俗说,一个对象具有另一个对象的属性和方法,可以通过原型继承等方式获得另一个对象的属性和方法。这一...
  • id 声明的对象有什么特性

    千次阅读 2014-05-15 22:32:14
    id 声明的对象具有运行时的特性,即可以指向任意类型的objcetive-c的对象;
  • javascript--对象的特性

    2017-10-11 17:23:49
    对象具有三大特性:封装,继承,多态 一、封装   1.函数封装是为了函数安全性,将对象进行包装,通过有限接口衍化不同对象  2.工厂函数封装  工厂函数是设计模型中一种说法,不是通过类实例化构造函数...
  • 对象具有属性和方法(行为) 对象是类实例 每一个对象都是唯一 万物皆对象 Java面向对象三大特性: 继承 继承就是java子类可以继承父类属性和方法 多态 多态是同一个接口,它不同实例可以实现不同...
  • 任何一个对象往往都有一些具体属性和方法,比如某汽车品牌、型号、排量,某人性别、身高、体重,某杯子口径,材质等等。任何一个对象往往能进行一些操作,比如汽车可以开动、人可以走路、吃饭等等,所以,...
  • 面向对象的三个特性

    千次阅读 热门讨论 2018-05-25 20:33:05
    一,封装解释:每个对象都包含它能进行操作所需要的所有信息,这个特性成为封装,因此对象不必依赖其他对象来完成自己的...2.继承者还可以理解为是对被继承者的特殊化,继承者除了继承的特性外,还有自己的特性。...
  • 面向对象的优良特性是封装,继承,多态。 封装意义,在于明确标识出允许外部使用所有成员函数和数据项,或者叫接口。 有了封装,就可以明确区分内外,使得类实现者可以修改封装内东西而不影响外部调用者;而...
  • python中面向对象编程三大特性一、面向对象编程三大特性二、对象和类三、封装特性四、继承特性五、练习 一、面向对象编程三大特性 面向对象的三大特性是指:封装、继承和多态 二、对象和类 类(Class) 是现实...
  • 面向对象4大特性

    2019-09-23 06:07:39
    类与对象之间关系:类时抽象,对象是具体,类是对象模板,对象创建时以类未模板,同一个类创造出来的对象具有共同属性,但属性值不同。 封装:利用抽象数据类型将数据和基于数据操作封装在一起...
  • 面向对象三大特性

    2020-12-13 21:47:02
    一、封装 每个对象包含它能进行操作所需要的所有信息,这个特性称为封装,因此对象不必依赖其他对象来进行自己的操作。将方法、属性、字段包装在类中,...子类具有(继承)父类的所有特性,也可以定义自己独有的特性

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,444
精华内容 4,177
关键字:

对象具有的特性