面向对象基础

java面向对象
    基本概念


        面向对象的世界观
            世界是由各种各样的具有自己独特的运动规律和内部属性的对象组成,不同对象之间互相作用和通讯就形成了缤纷的世界
            好处:
                更符合人对事物认识的规律
            对象:
            对象间的交互:


        类和对象


            概念: 类用来封装数据,及处理这些数据的方法
            类是抽象,而对象是具体
            可以理解为显示中的模具(清朝钱币模具)
            建模:   对象  --(抽象)---> 类 
            实例化:    类 ---(创建)---> 对象
            类变量和实例变量
                类变量: static修饰的变量成员变量
                    特点:可以通过类型访问
                实例变量: 没有static修饰的成员变量
                    特点:必须通过实例对象访问
            类中的static块:
                在类加载完成,进行初始化时执行,且整个生命周期只被执行一次,一般的可用于资源初始化
            修饰符
                public : 访问权修饰词
                abstract: 抽象类,不能实例化对象
                final:最终类,不能有子类
        继承
            允许创建分等级层次的类
            继承就是子类继承父类的特征和行为
            示意图:
            关键字:extends
            java不允许多重继承
            继承的作用
                多态
                代码复用
        方法的重载和重写
            方法: 类的行为(或者叫功能)
                方法可以类比为是遥控器上的按钮
                方法不能嵌套定义
                不能在方法体外直接写逻辑代码(static块除外)
            修饰符及作用域:(接口中定义的方法默认就是public的)
            重载(Overload):一个类里面,方法名字相同,而参数不同,最常用的地方就是构造器的重载
                好处:
                    传入不同的方法参数,具有不同的行为。(静态多态或叫编译时多态)
                规则
                    必须改变参数列表(参数个数或类型不一样)
                    可以改变返回类型
                    可以改变访问修饰符
                    可以声明新的或更广的检查异常
                    方法能够在同一个类中或者在一个子类中被重载
                    无法以返回值类型作为重载函数的区分标准
            重写(Override):是子类对父类的允许访问的方法的实现过程进行重新编写,但返回值和形参都不能改变
                好处
                    好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。(运行时多态)
                规则
                    参数列表必须完全与被重写方法的相同
                    返回类型与被重写方法的返回类型可以不相同,但是必须是父类返回值的派生类(说明:java5 及更早版本返回类型要一样,java7 及更高版本可以不同)
                    访问权限不能比父类中被重写的方法的访问权限更低,例如:如果父类的一个方法被声明为 public,那么在子类中重写该方法就不能声明为 protected
                    父类的成员方法只能被它的子类重写
                    声明为 final 的方法不能被重写(最终方法,不能被重写)
                    声明为 static 的方法不能被重写,但是能够被再次声明
                    子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为 private 和 final 的方法
                    子类和父类不在同一个包中,那么子类只能够重写父类的声明为 public 和 protected 的非 final 方法
                    构造方法不能被重写
                    重写的方法能够抛出任何【非强制异常】,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的【强制性异常】,或者比被重写方法声明的更广泛的【强制性异常】,反之则可以
        抽象类
            可以定义抽象方法
            不能实例化对象
            一般用于继承
            修饰符:abstract
            对类型进行建模
        接口
            所有方法均为抽象方法(jdk8之后不太合适)
            不可实例化
            jdk8:接口支持申明带实现的方法,关键字(default ) 
            类只能单一继承,但可以实现多个接口
            可以将接口理解为职责或契约
            对行为的建模
        多态
            概念:
                类的对象对同一消息作出不同的响应,这些不同类要么是继承了相同的父类,要么是实现了相同的接口
                    示意图:
            作用:
                解耦,各种设计模式的基础
            条件:
                有继承或实现关系
                子类重写父类的方法
                    例外情况:
                        static方法,因为被static修饰的方法是属于类的,而不是属于实例的
                        final修饰的方法,不能被子类不重写
                        private修饰的方法,对子类不可见,更不能被重写
                        protected修饰的方法,虽然子类可见也能重写,但不能再外部引用
                实现同一接口
                使用父类或接口类型来引用子类或接口的实现类
            分类:
                编译时多态
                    方法的重载
                运行时多态
                    方法的重写
            实现:
        异常
            分类
                强制异常(或叫受检异常)
                    Exception
                非强制异常(或叫非受检异常)
                    RuntimeException
                父类PigFather,子类Peppa(佩奇),George(乔治)
                    自动向上转型
                        PigFather f = new Peppa()
                        PigFather f = new George()
                    强制向下转型
                        Peppa p = (Peppa)new Father()
                        George  g = (George)new Father()
            try-catch-finally
            throw、throws
                用于抛出 异常实例
                用于在方法定义中声明该方法可能抛出的异常,如果异常为强制异常则方法调用者必须trycatch捕获或者继续抛出
            常见异常
                
            自定义异常
                最重要的是异常的命名
    OOP设计原则
        开闭原则
            对扩展开放
            对修改关闭
            是所有原则的总目标
        里氏替换原则
            子类应当可以替换父类并出现在父类能够出现的地方
            是多态的基础
        迪米特原则(最少知识原则)
            只与你的直接朋友交谈,不与"陌生人"说话
            优点:
                其目的是降低类之间的耦合度,提高模块的相对独立性
            缺点:
                过度使用迪米特法则会使系统产生大量的中介类,从而增加系统的复杂性
        单一职责原则(DIP)
            类不要承担太多的功能,职责要单一
            如果承担太多功能,则每个功能的变化都会影响该类
        接口分离原则(ISP)
            客户端不应依赖它不需要的接口
            可以理解为接口要符合单一职责原则
        依赖倒置原则
            高层模块不应该依赖底层模块,二者都应该依赖抽象
            抽象不依赖于具体,具体依赖于抽象
            中心思想是面向接口编程
            为什么?  细节的东西往往是多变的,而越抽象则越稳定
            示例:
        组合/聚合复用原则
            如果处于代码复用的目的,则应该使用组合/聚合复用原则,而不要使用继承
    设计模式
        为什么需要学习设计模式
            代表了最佳的实践,是很多优秀的软件开发人员的经验总结
            恰当的使用设计模式可以代码的可复用性,可维护性,可扩展性,健壮性及安全性
        常见的设计模式
            单例模式
                使用场景
                分类
                    饥饿模式
                    懒汉模式
            责任链模式
            观察者模式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值