JAVA面向对象

  • java的核心思想就是oop(面向对象编程)
  • 分类的思维模式
  • 属性+方法=类
  • 本质:以类的方式组织代码,以对象的组织(封装)数据
  • 三大特性:封装\继承\多态
  • 认识论:现有对象后有类,对象:具体;类:抽象
  • 代码运行:先有类后有对象
  • 1.回顾方法的定义

    • 类:用class修饰
    • 方法:类中的函数(e.g. main)
    • 方法的调用:
      • 1.递归
      • 2.静态(static)>>>可以直接通过类名+.+方法名进行调用

      • 3.非静态(没有 static)>>>不可以直接调用,需要将类实例化

      • 在一个java文件下的方法(都没有static/都有static/调用者不为static,被调用者为static),可以直接互相调用

      • (<<<要么static,要么new一个实例)
  • 2.类和对象的关系

    • 类:抽象的定义
    • 对象:抽象概念的具体事例
    • new:在创建新空间的同时,会对其属性附默认的初始值,或者构造方法
    • 构造方法:
      • 和c++的类的构造函数类似(方法名与类名相同;没有返回值,用于初始化值)
      • 如果定义了有参构造,那无参构造需要显示表示
      • 快捷键:alt+insert>>>可以生成构造器

      • "无选择"表示无参构造,可以多个勾选属性点击"确定",可以自动生成对应属性的有参构造

  • 3.封装

    • 高内聚,低耦合
    • 类的内部数据操作细节自己完成,不允许外部干涉
    • 仅暴露少量方法给用户
    • get(获得这个属性)/set(给这个属性赋值 ):给私有的属性一些可以操作这个属性的方法
    • 属性私有(private)
    • 快捷键alter+insert也可以自动生成get/set方法

    • 作用
      • 1.>>>>提高程序的安全性,保护数据
      • 2.隐藏代码的实现细节
      • 3.统一接口
      • 4.系统可维护性增加
  • 4.继承

    • extends:子类是父类的拓展,下图表示学生继承人这个类

    • (组合)将一个类作为另一个类的属性
    • 父类(基类) 子类(派生类) 子类继承父类用关键字extends
    • 子类可以继承父类的所有方法(public),私有的不可以使用
      • #大数书写tip

      • #四个修饰符
        • public
        • private
        • default(默认)
        • protected
      • 快捷键:ctrl+h 会打开继承树 object(在java中所有的类都默认继承object类)

      • ###java中只有单继承,没有多继承
  • 5.Super

    • this:指示当前类元素/方法
    • super:指示父类元素/方法(只能调用private&protected)
    • 当new一个子类的时候,会默认先调用父类的构造器(而且必须)
    • 当父类只有有参构造的时候,子类构造时也显示调用父类有参构造,将父类先构造
    • super调用父类构造方法,必须再构造方法的第一个
    • super和this不能同时调用构造方法
    • 只能在继承条件下才能使用
    • 快捷键ctrl+f搜索关键字查找
  • 6.方法的重写

    • 父类和子类都去new子类,调用其共有的函数,发现输出结果不同

    • 因为父类的引用指向了子类
    • 发现静态方法的调用,只和定义的数据类型有关
    • 而如果是非静态的方法,子类可以重写父类的方法(而且不能是private)
    • 删去static,即使方法的重写(override)
    • alt+insert可以系统快捷生成重写方法

    • 此时在重新加载代码,可以发现输出的都是子类的方法了

    • 总结
      • 需要有继承关系,子类重写父类的返回发
      • 1.方法名必须相同
      • 2.参数列表必须相同(不然为重载)
      • 3.修饰符:范围可以扩大,但不能缩小(public>protected>default>private)
      • 4.抛出的异常:范围可以被缩小,但不能缩小(classnotfound<exception)
      • 方法体不同
    • 为什么要重写:
      • 父类的功能,子类不一定需要,或者不一定满足
  • 7.多态

    • 动态编译,使可拓展性更强
    • 能执行哪些方法,主要看对象左边的类型所包含的方法,具体实现看是否被左边重写

    • 父类不能调用子类独有的方法,子类可以继承父类有的方法(非private)
    • 对上图错误的修改就是将s2强制转化为其子类(高转低)

    • 总结
      • 多态是方法的多态,属性是没有堕胎的
      • 父类和子类才有多态,没有关系会显示类型转化异常(classcastexception)
      • 存在的条件:继承关系,方法需要重写
      • 不能重写的修饰词:static,final(常量),private.
  • 8.instanceof(类型转换)

    • 子类转换为父类,可能会丢失一些自己本来的一些方法

  • 9.static关键字详解

    • 1.静态的变量:可见非static的变量不能直接通过调用类名来调用

    • 2.静态方法:非静态的不能直接在主函数中直接调用,非静态方法可以调用静态防方法,但静态方法不能调用非静态方法(因为静态函数是随者类建立建立的,因此先于非静态方法生成)

    • 3.代码块

    • static静态代码块可以先加载一些需要的数据的初始值,且只执行一次
    • 静态导入包,这样就可以直接使用导入包的方法,不用写名字

    • final:不能被继承
  • 10.抽象类

    • 用abstract修饰(类/方法)【局限:因为extends是单继承,所以引入接口,接口可以实现多继承】
    • 抽象类的所有方法需要有子类实现(除非它的子类也是抽象类,那就由其子子类进行实现)

    • 抽象类不能被new出来,会报错,但是还是有构造器的。
    • 如果有抽象方法,类必须是抽象的;抽象类中可以写普通方法
  • 11.接口

    • 普通类:只有具体实现
    • 抽象类:具体实现和规范(抽象方法)都有
    • 接口:只有规范,自己无法写方法(专业的约束)实现约束和实现分离
    • 声明关键字是interface
    • 接口中的所有定义都是抽象的(不写也默认)
    • 接口都给要有实现类(使用关键字implements)且可以继承多个
    • 实现了接口的剋,就需要重写接口中的方法

    • 接口中可以定义属性,且为静态的常量
    • 接口不能被实例化,他没有构造方法
  • 12.N种内部类

    • 内部类就是在一个类中再定义一个类
    • 通过外部类来实例化内部类:外部类名+.+new+内部类名
    • 且内部类可以访问私有属性

    • 但内部类一旦加上修饰词static,私有属性就拿不到了(实例顺序)
    • 在一个java文件中,只能有一个public class,但是可以有多个class

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值