物以类聚,分类的思维模式,
适合处理复杂的问题 ,适合处理需要多人协作的问题
面对复杂的问题,为了从宏观上把握,从整体上合理分析,我们需要使用面对对象的思路来分析整个系统,但是具体到微观操作,仍然需要用到面向过程的思路去处理.
类是对象的模板.
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实战
- 内部类就是在一个类中定义一个类,内部类可以访问外部内的私有熟悉
- 成员内部类
- 静态内部类
- 局部内部类
- 匿名内部类
Outer s = new Outer();//在这里Outer是我创建的外部类名,Inner是内部类名
s.new Inner();//这个和下面一行是一样的,通过外部类来引入内部类
new Outer().new Inner();