Java面向对象的基础解析

什么是对象

世界是由各种各样的具有自己独特的运动规律和内部属性的对象组成,不同对象之间互相作用和通讯就形成了缤纷的世界,Java的对象都是抽象的

Java里面就是把一个东西,解析出属于它本体的属性,符合人们对事物的规律对它的外观行为特征来区分是什么

例如 一条狗 (Dog)它有属于自己的名字 年龄 性别 颜色 这些基本信息

类和对象

概念:类是用来封装数据,及处理数据的方法 类是抽象的,对象是具体的

来举个例子 :

列如:钱 造钱是不是需要摸具  钱可以用 而摸具不可以使用

先进行建模 将这个对象的属性抽取出来,构造属于他的方法进行封装,封装完成之后还不能使用,要进行实例化,将这个类实例化出来进行调用

 

 

类的变量和实力变量

类变量: static修饰的变量成员变量
    特点:可以通过类型访问

实例变量: 没有static修饰的成员变量
    特点:必须通过实例对象访问

 

可以看到上面方法有static和没有的还有static方法体 让我们来看一下结果

可以看到加了static修饰变量直接通过类名点出属于它的方法,没有就点不出来

运行之后可以看到结果在类加载完成,进行初始化时执行,且整个生命周期只被执行一次,一般的可用于资源初始化,static的方法也是可以调用的

 

 对象实例化之后 就可以调用方法

 

 结果运行结果


类修饰符

 

 public : 访问权修饰词
abstract: 抽象类,不能实例化对象
final:最终类,不能有子类
 方法的重写与重载

 

    方法: 类的行为(或者叫功能)
        方法可以类比为是遥控器上的按钮
        方法不能嵌套定义
        不能在方法体外直接写逻辑代码(static块除外)

     方法可以类比为是遥控器上的按钮
    方法不能嵌套定义
    不能在方法体外直接写逻辑代码(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)
            客户端不应依赖它不需要的接口
            可以理解为接口要符合单一职责原则
        依赖倒置原则
            高层模块不应该依赖底层模块,二者都应该依赖抽象
            抽象不依赖于具体,具体依赖于抽象
            中心思想是面向接口编程
            为什么?  细节的东西往往是多变的,而越抽象则越稳定
            示例:

  组合/聚合复用原则
        如果处于代码复用的目的,则应该使用组合/聚合复用原则,而不要使用继承


      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值