zoukankan      html  css  js  c++  java
  • 面向对象

    面向对象编成的特点:封装性,继承性,多态性

     

    的声明格式:

          [public] [abstract | final] class 类名 [extends 父类名] [implements interfaceNameList]{    

                   //类体

          }

    *修饰符:可选参数,用于指定类的访问权限,可选值为public,abstract,final

    *如果省略[extends 父类名],则该类继承Object,Object类为所有类的根类,所有类都直接或间接继承Object.

     

    成员变量的声明格式:

     [public | protect | private] [static] [final] [transient] [volatile] type 变量名;

    *static:可选,用于指定该成员变量为静态变量,可以直接通过类名访问。如果省略该关键字,则表示该成员变量为实例变量。

    *final修饰符用于声明变量,该变量不能被修改。

    *transient:可选,用于指定该成员变量为暂时性变量,用于对象存盘

    *volatile:可选,用于指定该成员变量为共享变量,用于并发线程的共享。

     

    成员方法的声明格式:

    class 类名{

            [public | protected | private] [static] [final |abstract] [native] [synchronized] type 方法名(参数列表)[throws 抛出异常列表]{

                       //方法体

             }

    }

    *final | abstract不能同时修饰方法,final修饰的方法不能在子类中被覆盖,abstract用来修饰抽象方法,抽象方法必须在子类中被实现。

    *native修饰的方法,称为“本地方法”,本地方法调用平台本地代码,不能实现跨平台。

    *synchronized修饰的方法是同步的,当多线程方式同步方法时,只能串行地执行,保证线程是安全的。

     

    *包定义语法格式:package pkg1[.pkg2[.pkg3...]];

    *包引入语法格式:

    import package1[.package2...].(类型名|*);

    “包名.类型名”形式只引入具体类型,可以提高程序的可读性,“包名.*”采用通配符,表示引入这个包下所有的类型。

    *常用包:

    1.java.lang包:包含了Java语言的核心类,如ObjectClassString、包装类和Math等,还有包装类BooleanCharacterIntegerLongFloatDouble。使用java.lang包中的类型,不需要显式使用import语句引入,它是由解释器自动引入。

    2.java.io包:提供多种输入/输出流类,如InputStreamOutputStreamReaderWriter。还有文件管理相关类和接口,如FileFileDescriptor类以及FileFilter接口。

    3.java.net包:包含进行网络相关操作的类,如URL SocketServerSocket等。

    4.java.util包:包含一些实用工具类和接口,如集合、日期和日历相关类及接口。

    5.java.text包:提供文本处理、日期格式化和数字格式化等相关类及接口。

    6.java.awtjavax.swing包:提供了java图形用户界面开发所需要的各种类和接口。java.awt提供了一些基础类和接口,javax.swing提供了一些高级组件。

     

     

    ***封装:  是指隐藏对象的属性和实现细节,仅仅提供对外的公共访问方式。

    构造方法  

    特点:没有返回值,名称要与本类的名称相同

    在构造方法中可以为成员变量赋值,当实例化一个本类的对象时,相应的成员变量也将被初始化,使用this关键字可以调用类的成员变量和成员方法,还可以调用类的构造方法

    *注意事项:

    1.如果我们没有提供任何形式的构造方法,那么系统将提供一个无参数的构造方法

    2.如果我们提供了一个参的构造方法,那么系统将不再提供默认的无参的构造方法

    3.如果我们提供了一个带参数的构造方法,由于系统不再提供无参构造,所以我们需要手动添加一个无参构造

    4.构造方法可以允许以重载的方式来提供多个构造方法的存在的

    5.只可以在无参构造方法中的第一句使用this调用有参构造方法

     

    *private:私有的,可以修饰成员变量和成员方法,被private修饰的变量或者方法只能够在本类中进行访问,其他类无效

    *给私有成员变量赋值的两种方式:

    a.setXXX

    b.构造方法

    JavaBean:

      1.类必须是公共的、具体的

      2.必须提供一个无参构造方法

      3.隐藏实现细节和成员属性,对外提供公共的方式

     

    static的特点:

        1.可以修饰成员变量和成员方法

      2.随着的类加载而加载

      3.他的出生时机要优先对象

      4.可以被所有类的对象共享

    static的注意事项:

      1.在静态方法是不能存在this关键字的

      如何理解?

      静态是随着类加载而加载,this是随着对象的创建而加载

      静态的加载时机要优先对象的

      2.静态方法只能访问静态的成员变量和成员方法

      静态方法:

      成员变量:只能访问静态的成员变量

      成员方法:只能访问静态的成员方法

      非静态方法:

            成员变量:可以是静态的,也可以是非静态的

      成员方法:可以是静态的,也可以是非静态的

     

    final修饰局部变量的问题:

      基本类型:基本数据类型的值不能发生改变

      引用数据:则代表该类型的地址值不能发生改变,而不是对象的值不能改变

     

     

    ***继承:

    概述:把多个类中相同的内容给提出来定义到一个独立的类当中

     

    创建子类格式: [修饰符] class 子类名 extends 父类名{}

     

      好处:

      A.提高了代码的复用性

      B.提高了代码的可阅读性

      C.提高了代码的维护性

      D.让类于类之间产生了联系,他是实现多态的前提

     

    类与类之间产生了联系,其实也是继承最大的弊端:类于类之间的耦合度增强了

     

      开发的原则:高内聚 低耦合

      高内聚:每个一个类能够独立完成工作的能力

      低耦合:类于类之间的联系度

     

    Java中继承特点:

      A.Java支持单根继承,不支持多根继承

      B.Java支持多层继承(继承体系)

     

    Java继承的注意细节:

      A.子类只能继承父类的非私有成员(成员方法和成员变量)

      B.子类不能继承父类的构造方法,但是可以通过super([参数列表])去访问父类的构造

      C.千万不要因为部分功能而去使用继承(使用继承体系应该遵循一个"is a"的原则)

     

    继承中成员变量的关系:

      a.子类的变量名和父类的变量名不一致时,各自找各自的

      b.子类和的变量名和父类的变量名一致时:

      1.先在子类局部中去寻找,有就使用

      2.先在子类成员中去寻找,有就使用

      3.在去父类的成员位置,有就使用,没有就报错

    thissuper的区别:

      this代表是本类对象的引用

        super代表父类存储空间的标识(能够直接调用父类的成员数据)

     

      a.调用成员变量

      this.成员变量 调用的是本类的成员变量

      super.成员变量 调用的是父类的成员变量

      b.调用构造方法

      this() 调用的是本类的构造方法

      super() 调用的是父类的构造方法

      c.调用成员方法

      this.成员方法 调用的是本类的成员方法

      super.成员方法 调用的是父类的成员方法(被调用的父类型的成员方法可以是静态的,也可以是非静态的)

    继承中构造方法的关系:

    a.子类中的所有构造方法,都会默认访问父类的无参构造。

    b.为什么要访问?

    因为子类继承父类会使用到父类的数据,所以子类必须先访问父类的

    无参构造,以便将父类的数据进行初始化。

     

    子类对象调用方法的时候:先找子类本身,然后再去找父类

     

    注意:子类的构造默认的第一句代码是super();

     

     方法重写:子类当中出现了和父类当中声明一模一样的方法

     方法重载:本类当中,方法名相同,参数列表不同,与返回值无关

     

    方法重写的应用:

    当子类需要父类的功能,而功能的主体又不能满足子类的需求,可以重写父类的方法

    如果不写super,那么父类的所有功能将会被覆盖。

      如果写上super,那么既沿袭了父类的功能,又能扩展子类的功能。

     

    方法重写的注意事项:

      1.父类的私有方法不能被重写

    2.子类的访问权限不能低于父类

    3.父类如果是静态方法,子类也必须重写父类的静态方法(这个其实算不上方法重写)

    4.子类必须覆盖父类中声明为abstract的方法

    5.子类不能覆盖父类中声明为final或者static的方法

     

     

    ***多态

    概述:同一个对象,在不同时刻体现出来的不同状态。

     

    多态的前提:

    a.要有继承关系

    b.要存在方法的重写(方法重写不是多态必须的)

    c.要有父类的引用指向子类的对象

      Fu fu = new Zi();

     

    用代码的实现下多态:

      多态中成员访问的特点:

      a.成员变量

      编译期,看左边,运行期看左边

      b.成员方法

      编译期,看左边,运行期看右边

      c.构造方法

      创建子类对象的时候,先访问父类构造,对父类的数据进行初始化

      d.静态方法

      编译期,看左边,运行期看左边

     

     除了成员方法,其余全部看左边,因为成员方法存在方法重写,重写会覆盖父类,所以运行看子类就可以了

     

    多态的好处:

    a.提高了代码的可维护性(继承来体现)

    b.提高的代码的扩展性(由多态来体现)

    多态的弊端:不能使用子类的特有的功能。

       解决此弊端: a.直接创建子类对象即可(但是不合适也不合理。而且非常耗内存)

            b.把父类引用直接强制转换为子类引用(向下转型)

     

    ClassCastException:类型转换失败异常,一般只出现在多态向下转型过程中

    *在进行对象的向下转型之前,必须首先发生对象向上转型,否则将出现对象转换异常。

    对象向上转型:父类 父类对象 = 子类实例;

    对象向下转型:子类 子类对象 = (子类)父类实例;

     

     

    抽象类

    特点:

    a. 抽象类和抽象方法必须用abstract来修饰。抽象类当中可以没有抽象方法,有抽象方法的类,一定是抽象类

    b.抽象类修饰词只能为public,protected或省略

    c.抽象类是不能够实例化的

      1.因为它不是一个具体的存在

      2.抽象类有他的构造方法,虽然不能示例化,但是需要他的构造方法去访问父类的初始化数据

      d.抽象类的子类

      1.如果你不想重写父类的抽象方法,该子类必须是一个抽象类

      2.如果你需要重写父类的所有抽象方法,这个是时候,子类可以是一个具体的类

     

      e.抽象方法不是一个具体的存在,不能定义任何功能,连花括号也没有

    f.抽象类的实例化依靠子类来实现,这个也是多态的实现方式

     

    抽象类的成员特点:

    成员变量:有,可以是常量也可以是变量

    构造方法:有,用于访问父类的初始化数据

    成员方法:有,可以是抽象的,也可以是非抽象的

     

    抽象类的成员方法的特征:

    A.抽象方法,强制限制子类必须要完成的功能,不能使用privatestatic关键字修饰

    B.非抽象方法,子类可以继承该方法,提高代码的复用性

     

    单例设计模式:

      1.可以避免程序过多的建立该类对象,其他程序无法通过其他渠道来创建对象

      2.可以无限的节省内存空间,保证了该对象的唯一性(地址)

    //懒汉式

    public class LanHanShi {

    private LanHanShi(){}

    private static LanHanShi lan=null;

    public static LanHanShi getLanhan() {

    if(lan==null) {

    lan =new LanHanShi();

    }

    return lan;

    }

    }

    //饿汉式

    public class ErHanShi {

    private ErHanShi(){}

    private static ErHanShi er=new ErHanShi();

    public static ErHanShi getErHanShi(){

    return er;

    }

    }

     

    内部类

    外部类可以是static的,也可用public,default,protectedprivate修饰,而外部类只能使用publicdefault修饰.

    创建内部类对象格式:

          外部类名 外部类对象 = new 外部类名();

          外部类名.内部类名 内部类对象 = 外部类对象.new 内部类名();

    产生外部类对象的引用   外部类名.this

    对于不具有静态属性的实名内部类,如果它的成员域具有静态属性,则必须同时具有(final)最终属性

     

    *成员内部类:

       1.不能存在任何static的变量和方法

       2.依附于外部类的,所以只有创建了外部类才能够创建内部类

     

    *静态内部类:

    1.创建时不需要依赖于外部类

    2.不能使用任何外部类的非static成员变量和方法

    3.不能含有具有静态属性的成员方法

    创建静态实名内部类的实例对象格式:

          new 外部类名.实名内部类名(构造方法的调用参数列表)

          如果该语句在外部类的构造方法中可省外部类名.

     

    *局部内部类:

    1.方法或作用域中的内部类没有访问修饰符,即方法或作用域中的内部类对包围它

    方法或作用域之外的任何东西都不可见。

          2.方法或作用域中的内部类只能够访问该方法或作用域中的局部变量,而且这些局部变量一定要是final修饰的常量。

     

    *匿名内部类:

    1. 匿名内部类后面的分号不可缺少

    2. 匿名内部类没有访问修饰符

    3. new匿名内部类时,这个类首先要存在

    4. 被匿名内部类使用的方法的形参必须用final修饰

    5. 匿名内部类没有构造方法

    创建匿名类之前,首先声明匿名类的接口,否则编译提示找不到匿名类

    直接实例化接口对象:new A(){}

    接口本身是不能直接进行实例化的,所以在接口实例化之后要有一个大括号,用于实现接口中的抽象方法

     

    接口

    定义接口格式:interface 接口名 {}

    类实现接口格式:class 类名 implements 接口名 {}

    接口不能实例化,按照多态的方式来进行实例

       接口的子类

           a.可以是抽象类,但是一般不用 没有任何意义

           b.可以是具体类,但是必须重写接口的所有方法

    由此可见:

           a.具体类多态(几乎不用)

           b.抽象类多态(比较常用)

           c.接口多态(用的非常非常非常多)

    接口成员的特点:

         成员变量:只能够是常量,不存在变量(而且还是用static修饰的)

         成员方法:只能是抽象方法,默认:public abstract void 类名();

         构造方法:没有构造方法

     

         所有的类都会默认地访问一个叫做Object的类,也是说,Java中所有的类都继承自Object类,Object 是类层次结构的根类。每个类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法。

     

    类与类:继承关系,只能单继承,但是可以多层继承

    类与接口:实现关系,可以单实现,多实现,还可以在继承一个类的同时实现多个接口

    接口与接口:继承关系,可以单继承,也可以多继承

    形式参数:

      基本数据类型:要的其实就是实际参数

      引用数据类型:

          类名:需要的其实是该类的对象

          抽象类:需要的其实是该抽象类的具体子类对象

          接口:需要的其实是该接口的实现类对象

    返回值类型:

      基本数据类型:返回基本数据类型对应的数据值

      引用数据类型:

          类名:返回的其实是该类的对象

          抽象类:返回的其实是该抽象类的具体子类对象

          接口:返回的其实该接口的实现子类对象

     






  • 相关阅读:
    Beta 冲刺 (2/7)
    Beta 冲刺 (1/7)
    2017软件工程实践总结
    华为软件开发云评测
    android开发——用户头像
    学生&部门智能匹配程序
    学生会里学生汇
    数独棋盘生成器
    读与思
    Java接口
  • 原文地址:https://www.cnblogs.com/tripleDemo/p/10288630.html
Copyright © 2011-2022 走看看