`

什么面向对象

阅读更多

什么面向对象:
个人分析觉得:在程序设计里,面向对象是一种相对说法,相对于面向过程而言的;
面向“对象":即重点在于“对象";而面向过程:则重点在于“过程”,简单说:就是我我们看待事物在眼光上注重点不一样;比如说:我们评判一个女孩漂亮与否,有的人看重外表,有的人则看重“心灵”,只是侧重点不一样。
举个例子:把大象装进冰箱!
                
                    面向过程                                      面向对象
            (注重一系列动作即过程)                       (注重动作所操作的承受者[“对象”])
                     
                “打开”冰箱                                “冰箱”打开
                装入”大象                                “大象”装入
                关闭”冰箱                                “冰箱”关闭

类:通俗的说类就是“一类事物的简称”,并且这些事物至少具有一点共同的”特征.比如说:动物就是一个类

对象:就是某一类中一个具体的(就是可以具体描述出来的)东西,比如:动物(类)里的“狗”就是一个对象。(个人觉得对象相对于类而言的,因为狗又可以分好多种,‘狗’相对于‘哈士奇’是一个类,‘哈士奇’是‘狗’类的一个具体对象)

在生活中就拿描述汽车来说,我们都知道汽车都有4个轮子; 都有跑的功能
可以如下描述:
    类     汽车                    
    属性: 4个轮
    功能: 
那么怎么在Java中描述汽车这类呢?
class car{
    int wheel=4;//属性: 4个轮
    void run(){//方法(功能): 跑
    System.out.println("是汽车都会跑");
    }
}
那么可见“出租车”应当是“汽车”这类的一个具体化(实实在在的例子即“实例”)对象,那自然出租车也就具备了汽车这类所具备的“共有”属性功能!
如何创建一个出租车对象呢?java中通过new关键字来创建一个类的实例即对象,也叫类的实例化,就是把类具体化成一个实例嘛!
格式:类名  对象名 =  mew 类名  ()  
      Car    texi =   new  Car();
创建了“出租车”对象(实例)之后那么它也就有了如下“自己”的属性和功能。
    int wheel=4;//属性: 4个轮
    void run(){//功能: 跑
            System.out.println("我是出租车我也会跑");
    }
我们如何来访问对象中的它自己的属性和方法呢?
格式:对象.属性;        对象.方法名();   这一点也验证了面向对象编程的侧重点在于“对象”上;
      texi.wheel;            texi.run()
*********************************************************************************************************************************************************************************************************************************************
 
1.封装:
从字面可以解读为将东西封起来再装好。要想拿到里面的东西就得有相应的方法打开,才能拿到。
举例来说:一个房间的门如果没有上锁,那么大家都可以进去拿东西,但现在我们不想让谁都进来拿东西,我们可以将房门上锁,只对外提供一把钥匙,只有有钥匙的人才能进来,这就是“封装”现象!

在java程序中,“封装”现象如何实现呢?
可以这样实现将类中的一些属性和方法用private关键字修饰,将他们“私有化(即不对外直接公开)”,使外部其他类不能通过创建该类对象或通过类名直接访问这些属性和方法;只对外提供公有的方法,外部其他类必须通过该类对外提供的公有方法来访问该类的相应成员;例如:
class Person{
   private String name;//将name属性私有化(封装)[相当于了上锁]使外部其他类不能直接访问到
    public SetName(String name){//对外提供公有方法(相当于房门钥匙)供外部其他类访问到本类属性
        this.name=name;
    }

}

2.继承:
    从字面来说继承就是子父类关系的简称 ,就是儿子(女儿也行,好吧)会继承老爸的一些属性和行为
在java中如何描述继承关系呢?
  注意:   第一得知道在java中继承是类与类之间或者是接口与接口之间才有继承关系;通过extends关键字来描述继承关系
例如:老爸这个类
class Dad{
    String sex=man;
    void smoke(){
        System.out.println("老子会抽烟!");    
    }
}
那么我们怎么来让儿子这个类继承老爸这个类呢?
class Son extends Dad{//通过extends关键字儿子这个类就继承老爸这个类了
    String name;//定义自己的属性
    String sex=man;//继承过来的属性,无须再定义这里写出来是为了好理解
    void smoke(){//继承过来的方法无须再定义,这里写出来是为了好理解
        System.out.println("老子会抽烟!");    
    }
    void playBall(){//定义自己的方法
        System.out.println("儿子即会打球又会抽烟!");    
    }
    void somke(){//重写的方法
        System.out.println("我不抽20块以下的烟");
    }
    void smoke(int n){//重载的方法
    System.out.println("我抽了+n+"年的烟了");
    }
}
那么具有继承关系的两个类有什么特点呢?
1)子类会将父类的属性和方法继承过来,当然子类也可以自己定义的属性和方法
2)当子类自己定义的方法和父类继承过来的方法相同时会发生“重写“现象!
3)父类用private关键字私有的方法是不能被继承的!
4)子类可以使用super访问父类的属性和方法
5)子类通过重写父类方法,修改父类的功能
6)子类构造器一定调用父类的无参构造器
7)构造器不能继承

3.多态:
字面意思就是多种形态,也就是说一种事物同时局部多种形态.
注意要出现多态情况,那么类和类之间一定得是继承关系,或者类和接口是实现关系
我觉得:在java中多态是相对于一个对象而言的,就是父类型引用变量引用子类对象,并且父类型引用变量可以接受不同子类的对象
例如:拿上面的举例
 Dad uncle=new Son();父类引用变量uncle即具备Son类的成员又具备父类的成员;这也称为“向上造型”;
多态时的特点
1)多态时访问成员变量,如uncle.name;
编译时看等号左边,父类有该成员变量则编译通过,否则编译出错!
运行时也看等号左边,有则运行结果
2)多态时访问方法,如uncle.smoke()
编译时看等号左边,父类有该成员方法则编译通过,否则编译出错!
运行时看等号右边,父类有该方法,子类没有该方法执行父类方法;父类有该方法,子类也有该方法执行子类方法
3)多态时访问静态方法
编译运行都看等号左边
******************************************************************************************************************************************************************************************************************************************************************

 4.抽象(有争议): 
什么是抽象?
抽象就是不具体 。
一般我们把不能具体描述的东西约定俗成为“抽象”的东西 。例如:我们说一个人长得很“抽象”,n你想你能具体形容描述出来么?
在JAVA中如何描述抽象这个概念呢?
我觉得在java中抽象类是由抽象方法而衍生出来的,为什么呢?
    因为Java规定一个类中定义了抽象方法那这个类就跟着必须定义为抽象类,而不是因为先定义抽象类再跟着规定抽象类中的方法必须是抽象的,可能最后理解的结果是一样的但性质是不一样的(个人理解)简单说:就是有抽象方法的类一定是抽象类,但是抽象类中不一定都是抽象方法,也可以有具体方法。
首先就是当我要在一个类定义一个方法时,暂时我不知道该方法具体功能是什么;等我想好了我在用他实现一个功能时我再具体描述他功能,这样我们就可以将这个方法用abstract关键字修饰定义为抽象方法
(还有一点也就是什么时候定义抽象类的?也可以说抽象类是向上抽取而来的,就是几个类据有共同的属性和方法,不想每个类都定义一次,那么定义一个公有类(即抽象类)其他类只要继承抽象类再重写方法就行!)
例如:我有一百块钱,现在我不知道怎么用,等我想好了在具体怎么用!
abstract class Money{//因为有了抽象方法所以必须定义为抽象类
    public abstract void buySomthing();//现在不知道怎么用,那就把它的功能代码体去掉
}
//现在我饿了,想买东西吃了,我就知道怎么用了
class Hungry extends Money{
    void buySomething(){
        System.out.println("我饿了,现在我要买东西吃!")
    }
}
抽象类的特点
1)抽象类不能实例化
2)抽象类可以继承抽象类
3)继承抽象类必须得重写抽象方法

5.抽象类,接口,普通类 的不同点和相同点?
  1)不同点: 
            普通类             接口                                     抽象类
可以直接实例化对象        不可以直接实例化对象                                不可以直接实例化对象    
可以定义任何成员            只能定义抽象成员方法和常量                     成员方法必须定义为抽象其他和普通类相同
可以被继承                            类可以实现接口,且可以实现多个接口         可以被继承  
                        接口可以继承多个接口                    抽象类有构造方法,接口中不能有
                                                           抽象类有普通成员变量,接口中没有
                                                           抽象类可以有非抽象方法,接口中不能有 
                                                          抽象类可以用public、protected修饰,接口中只能public(默认public)
                                                          抽象类包含静态方法,接口中没有
                                                         接口中的变量只能是public static final,抽象类中可以是任意类型修饰 

2)相同点:都可以用于描述(封装)事物的,

内部类分为哪几种?分别如何创建对象?
分为 局部内部类,匿名内部类...3种 

1)外部类名.内部类名 对象名=new 外部类名().new 内部类名 ()
2)外部类名.内部类名 对象名=外部类名.new 内部类名 ()
3)....不记得了第3种
匿名内部类 
二、集合 
集合的定义?
集合:用来保存一组数据的数据结构 
集合的父接口,实现接口,实现类,实现类的常用方法是什么?(建议以树状图画出来,便于加深印象)。
                                                              Collection                                                                
                                                    list                     set    
                                        Arraylist   LinkedList      HashSet  TreeSet 


1.List集合
List集合的特征是元素可重复且有序 ;我们可以把他看成是一个动态数组,一般通过下标访问
ArrayList和LinkedList最常用的两个子类实现
1)list可以使用for循环遍历
for(int i=;i<list.size();i++?){
    list.get(i);
}
2)list的浅层复制
调用ArraryList.clone()方法 
注意:不能使用list.clone(),clone()方法是Object类的方法,list是接口是不能继承Object类的

2.Set集合:
不重复且无序集
遍历set只能迭代器,用迭代器遍历集合遵循的操作原则:先问后取。问一次取一次。
Iterator<E> it=set.iterator();
while(it.hashnext()){
    E e=it.next();
}
3)map表
Map存储数据使用key-value(键-值)对的形式存储数据的。 
对于Map而言,要求key值是唯一的。value值可以重复 
获取数据时,使用key可以获取其对应的value
遍历map有3种方法
1)遍历key
  Set<String> keySet = map.keySet(); 
      for(String key:keySet){ 
          System.out.println("key:" + key); 
          //可以根据每一个key获取其对应的value值 
          int value = map.get(key);
2)遍历value
Collection<Integer> values = map.values(); 
        Iterator<Integer> it = values.iterator(); 
        while(it.hasNext()){ 
            int value = it.next();//不能采用 map.next() 
            System.out.println("value:" + value);
注意:通过迭代器在遍历集合的过程中,不能通过集合(即不能采用 map.next())去改变集合元素数量
3)遍历键值对 
    Set<Entry<String,Integer>> entries= map.entrySet(); 
        for(Entry<String,Integer> entry : entries){ 
            //获取一组键值对的键和值 
            String key = entry.getKey(); 
            int value = entry.getValue(); 
            System.out.println(key + "=" + value);

Collection接口方法的定义
这里我主要列举 Iterator iterator()方法的使用
Collection提供的方法 Iterator iterator()方法来获取迭代器
Iterator是一个接口,定义了遍历集合应有的方法。
使用迭代器遍历集合遵循的操作原则:先问后取。问一次取一次。 
   问:boolean hashNext() 
  取:Object next() 
迭代器可以将取出的数据删除掉 
删:remove() 将当前获取的元素删除掉。 
注意:1)删除的是next()取出的元素。且只能删除一次! 
       2)调用1次next()后只能调用一次remove()! 
 







 

分享到:
评论

相关推荐

    《Erlang之父:为什么面向对象很糟糕》PDF

    《Erlang之父:为什么面向对象很糟糕》PDF 《Erlang之父:为什么面向对象很糟糕》PDF 《Erlang之父:为什么面向对象很糟糕》PDF 《Erlang之父:为什么面向对象很糟糕》PDF 《Erlang之父:为什么面向对象很糟糕》PDF

    面向对象软件工程

    《面向对象软件工程》 作者:Stephen.R.Schach 学校:(美)范德比尔特大学 书名原名:Objected-Oriented Software Engineering 目录: 第一部分 面向对象软件工程简介  第一章 面向对象软件工程的范畴  第二章 ...

    易语言面向对象编程 面向对象学习

    易语言面向对象学习 1 一.枯燥的理论 2 1.对象和类 2 2.类的“成员”与“方法” 2 3.实例化 2 4.继承 3 二.牛刀小试 3 1.定义一个类,生成实例对象 3 2.“_初始化” 与 “_销毁” 5 三.一个更丰富的“员工...

    c#笔试题 7套面向对象 oop

    1. 填空: (1)面向对象的语言具有___继承性、封装性、多态性。 (2)能用foreach遍历访问的对象需要实现 IEnumerable接口或声明GetEnumerator 方法的类型 (3)列举ADO.net中的五个主要对象 Command、Connection、...

    第16章 LabVIEW中的面向对象编程,labview面向对象的框架,LabView

    在LabVIEW中实现面向对象编程(Object-Oriented Programming, OOP)可以提升代码的可重用性、可维护性和组织性。本章将深入探讨LabVIEW中的面向对象编程框架及其应用。 面向对象编程的核心概念包括类(Class)、...

    测试驱动的面向对象软件开发

    测试驱动的面向对象软件开发是一种将测试作为软件开发过程中核心组成部分的方法论。这种方法结合了测试驱动开发(TDD)和面向对象编程(OOP)的优势,旨在提高代码质量、增强可维护性和降低后期修复错误的成本。 ##...

    面向过程、面向对象、面向组件、面向服务软件架构的分析与比较

    面向过程、面向对象、面向组件、面向服务软件架构的分析与比较 软件开发历程与架构演进 软件开发从汇编语言、过程式语言、面向对象、面向组件发展到面向服务,这一进程不仅反映了编程技术的不断进步,更是软件工程...

    面向对象概要设计模板

    面向对象概要设计模板 面向对象设计是一种软件设计方法,它强调对象之间的交互和协作,以达到软件系统的高内聚、低耦合的目标。在软件设计中,面向对象设计方法可以帮助开发者更好地理解系统的需求和行为,从而提高...

    Python面向对象之类和对象实例详解

    本文实例讲述了Python面向对象之类和对象。分享给大家供大家参考,具体如下: 类和对象(1) 对象是什么? 对象=属性(静态)+方法(动态); 属性一般是一个个变量;方法是一个个函数; #类的属性 就是 类变量 #...

    面向对象葵花宝典-电子版

    面向对象是目前最流行的一种程序设计和实现思想,无论你是从事企业级开发、互联网应用开发,还是手 机软件开发,都会使用到面向对象的技术;主流的编程语言中,C++,Java,C#,PHP,Python等都是支持 面向对象的语言;...

    漫画面向对象编程 Java

    借助于漫画展示的形式,面向对象的简、由类创建一个对象的方法、类的编写与对象的创建、类的构造函数、类的方法、修饰符、Java中的封装/继承/多态等特征、Java中的线程、用Java创建一个小世界、多线程共享数据,以及...

    实用面向对象软件工程教程

    本教程“实用面向对象软件工程教程”旨在深入探讨面向对象分析(OOA)和面向对象设计(OOD)的关键原则,帮助开发者构建高质量、可维护的软件系统。 在面向对象分析阶段,我们首先理解问题域,识别出关键实体和它们...

    软件工程面向对象分析实验报告

    面向对象分析(Object-Oriented Analysis,OOA)是软件工程中的一种重要方法,它着重于从实际问题出发,抽象出问题域内的对象及其相互关系,以构建问题域模型。在“软件工程-张海藩编著--面向对象分析实验报告”中,...

    plc面向对象编程架构与实现

    面向对象编程是计算机语言的一种先进的编程模式,在工业控制系统的PLC程序中也可以采用这种设计思想,虽然我们无法实现面向对象的很多特点如“继承”,甚至于它根本就不具备面向对象编程语言的特点,但面向对象编程...

    Python 3面向对象编程

    Python 是一种面向对象的解释型语言,面向对象是其非常重要的特性。《Python 3面向对象编程》通过Python 的数据结构、语法、设计模式,从简单到复杂,从初级到高级,一步步通过例子来展示了Python 中面向对象的概念...

    Java面向对象程序设计

    Java面向对象程序设计是计算机编程领域中的核心主题,它基于面向对象编程(OOP)理念,使得代码更具有模块化、可复用性和易于维护的特点。以下是对标题和描述中涉及的知识点的详细阐述: 1. **第1章:Java入门** -...

    面向对象分析与设计UML2.0(PDF)

    详细介绍了面向对象的分析与设计,全面探讨了面向对象概念、软件开发过程、UML和多层技术。本书使用最常见的技术和方法,通过一个贯穿全书的案例分析,对面向对象的软件开发过程和使用面向对象技术的编程过程进行了...

    面向对象的系统分析与设计 课件+课后答案

    面向对象的系统分析与设计是计算机科学领域中的一个重要主题,它涵盖了软件开发过程中的一些关键概念和技术。本资源包括了相关的课件和课后答案,帮助学习者深入理解这一主题。以下将详细介绍其中涉及的主要知识点:...

    面向对象分析与设计.pdf

    由于提供的文件内容不包含实际的文本信息,而是重复的URL链接,因此无法从该部分提供有关面向对象分析与设计(OOAD)的知识点。但是,我将尽可能详细地介绍面向对象分析与设计的相关知识点,以满足您的需求。 面向...

Global site tag (gtag.js) - Google Analytics