面向对象编程(OOP)

物以聚,分类的思维模式,

适合处理复杂的问题 ,适合处理需要多人协作的问题

面对复杂的问题,为了从宏观上把握,从整体上合理分析,我们需要使用面对对象的思路来分析整个系统,但是具体到微观操作,仍然需要用到面向过程的思路去处理.

类是对象的模板.

claa修饰的是 类

对象是具体的,类是抽象的

面向对象的本质是:以类的方式组织代码,以对象的形式封装数据.

对象的创建和分析

new一个对象的时候,除了给她分配空间还会给她默认的初始化值(基础类型存值,引用类型存地址),以及对类中的构造进行调用

构造器类中的构造器也被成为构造方法,是在进行创建对象的时候必须要调用的,并且构造器有一下两个特征

  • 必须和类名相同
  • 必须没有返回类型,也不能写void,无参构造,具体的在class文件里面可以看到
构造器作用
//1.使用new关键字,必须要有构造器,,,new的本质是调用构造方法
//2.用来初始化对象的值

程序执行顺序:静态代码块(只输出一次)>>>>匿名代码块(赋初始值)>>>>构造方法

构造器注意点

定义了有参构造之后,如果想使用无参构造,必须自己在重新写一个无参构造

在这里插入图片描述

面向对象三大特征

封装

  • 该露的露,该藏的藏,我们程序设计要追求"高内聚,低耦合",就是说类的内部数据操作细节自己完成,不允许外部干涉, 低耦合就是仅暴漏少量的方法给外部使用

  • 数据的隐藏,通常应禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问,

  • 属性私有,private,调用需要使用public+++get/set的方法,有快捷键alt+ins

  • //属性私有private
       private String name;//名字
       private int id;//学号
       private char sex;//性别
    //上面的属性都是私有的 ,要想使用需要用到一些方法
        //public的get/set方法
        //get获得这个数据
        //set给这个数据设置值
    

封装的意义:提高程序的安全性,隐藏代码的实现细节,统一接口…系统可维护增加

继承

  • 继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模

  • extends的意思是"扩展".子类(派生类)是父类(基类)的扩展.

  • JAVA中 类只有单继承,没有多继承**(接口可以多继承)**

  • 继承是类和类之间 的一种关系,除此之外关系还有:依赖,组合,聚合等

  • 子类和父类之间,从意义上来讲,应该具有 is a 的关系

  • 私有的东西,不能被继承

  • 调用父类的构造器必须要放在代码的第一行,调用子类本身或者父类的构造器,都必须放在代码的第一行

  • 在这里插入图片描述

  • Object类

java中所有的类都直接或者简介继承Object


super和this对比:super代表父,this 代表当前的,

方法重写:子类的方法和父类必须要一致,方法体不同

1.重写是方法的重写,和属性无关

2.非静态的方法才可以重写

3.方法名要相同

4.参数列标必须相同

5.修饰符:范围可以扩大,不可以缩小,修饰符从大到小如下:

//public公共的
//protected  受保护的
//default 不写的时候就是默认的这个
//private 私有的

6.抛出的异常,范围,可以被缩小,不可以扩大

7.要有继承关系,子类重写了父类的方法

8.父类的方法是private私有的时候,不可以重写

三种情况方法不能重写:

static(理解为父类基因),

final(final修饰的类,不能有子类,断子绝孙)

pribate(理解为父类私有财产,是家人不知道的隐藏资产)

为什么需要重写

父类的功能,子类不一定需要,或者不能满足

多态

  • 动态编译:类型:可扩展性
  • 即同一方法可以根据发送对象的不同而采用多种不同的行为方式
  • 一个对象的实际类型是确定的,但是可以指向对象的引用的类型有很多

多态存在条件

在这里插入图片描述

  • 有继承关系
  • 子类重写父类方法
  • 父类引用指向子类对象 举例:father a=new son(…)
注意
  • 多态是方法的多态,属性没有多态性

  • instanceof (类型转换),引用类型之间的转换,判断对象是什么类型

  • System.out.println(X instanceof Y);这个代码能不能编译通过,就是看X和Y有没有继承关系

  • Object s1 = new Student();
    System.out.println(s1 instanceof Student);//ture
    System.out.println(s1 instanceof Object);//ture
    System.out.println(s1 instanceof Person);//ture
    System.out.println(s1 instanceof Teacher);//false
    System.out.println(s1 instanceof String);//false
    

抽象类和接口

抽象类:(可以比喻为 家训,精神之类的东西,家族内传承的东西)
  • abstract修饰符可以用 来修饰方式,也可以修饰类,如果修饰方法,那么方法就是抽象方法,如果修饰类,那么该类就是抽象类…
  • 抽象类中可以没有抽象方法,但是抽象方法所在的类,一定要声明为抽象类
  • 抽象类 不能使用new关键词来创建对象,它是用来让子类继承的
  • 抽象方法只有方法的声明,没有方法的实现,
  • 子类继承抽象类,那么就必须实现抽象类没有实现的抽象方法,否则该子类也要声明为抽象类,
接口(可以多继承,可以理解为书籍,可以供很多后人翻阅,继承他的思想,但是具有强制性)
  • 普通类,只有具体实现
  • 抽象类,具体实现和规范(抽象方法)都有
  • 接口,只有规范,自己无法写方法!能实现约束和实现的分离
  • 接口就是 规范,定义的是一组规则,体现了现实世界中,:"如果 你是…则必须能…"的思想,如果你是天使则必须能飞,…如果你读了我的书,就必须要能会用书里的东西,
  • 接口的本质是契约,就像我们人间的法律一样,指定好之后大家都遵守
  • OO的精髓是对对象的抽象,最能体现 这一点的就是接口,
  • 声明类的关键字是class 而声明接口的关键字是interface
//接口中定义的方法,其实都是public abstract
//属性定义的是个常量,例如int age=99;其实是  public static final int age=99;

接口作用

  • 约束
  • 定义一些方法,让不同的人实现
  • 方法,其实都是public abstract
  • 接口不能实例化,接口中没有构造方法
  • implements可以实现多个接口,
  • 实现类必须实现接口中的方法

内部类和OPP实战

  • 内部类就是在一个类中定义一个类,内部类可以访问外部内的私有熟悉
  1. 成员内部类
  2. 静态内部类
  3. 局部内部类
  4. 匿名内部类
Outer s = new Outer();//在这里Outer是我创建的外部类名,Inner是内部类名
s.new Inner();//这个和下面一行是一样的,通过外部类来引入内部类
new Outer().new Inner();
一个java里面可以有多个class,但是只能有一个public class
局部内部类是方法中的class

lamabada表达式

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值