1-Java基础回顾整理_07_面向对象
1、面向过程与面向对象
面向过程思想:1)执行步骤清晰明了,第一步,第二步。。。 (是线性的)
2)主要用来处理一些比较单单的问题;
面向对象思想:1)物以类聚,是一个分类的思维模式,会首先思考解决问题需要哪些分类,然后对这些分类进行单独的思考,最后才对某个分类下的细节进行面向过程的思想;
2)适合处理复杂的问题,以及一些需要多人协作的问题;
总结:
客观上使用面向对象的思路,微观执行上使用面向过程的思路来处理;
2、面向对象的本质
以类的方式组织代码,以对象的组织来(封装)数据
核心思路:就是抽象
面向对象三大特性:封装:暴露的东西越少,代码复用性就越高,接口也会更加的适用
继承:比如儿子继承父亲,父亲有的东西儿子都会有
多态:比如同样是一个人,不同的人有不同的收获,特点不同,就是多态
3、面向对象与类的关系
1)从认识代码角度看:是先有的对象后有的类,对象是具体的事物,类是抽象的,类是对对象的抽象
2)从代码运行角度看:是先有类后有对象,类是对象的模板
4、break与return
break作用:跳出switch循环,结束循环;
return作用:方法的结束,返回值;
5、方法回顾
当类里面的方法声明中含有static关键字,那么这个方法不能被其他没有static关键字修饰的方法调用,因为有了staitc关键字,那么这个方法就是和类一起创建的,比没有static关键字的普通方法出现的要早,普通方法是和对象有关的,当类对象实例化之后才存在;
6、值传递与引用传递
值传递:就是方法的形参,当没有返回值的时候,对调用方法的原原参数不会产生影响;
引用传递:传递的是对象,如果更改了对象里面的属性值,那么就会对该对象产生影响
7、this关键字指的是当前的这个对象
8、类与对象的关系
1)类是一种抽象的数据类型,它是对某一类事物的描述/定义,但是并不能代表某一具体的事物;
2)对象是抽象概念的具体实例,它能体现出特点,展示的功能是具体的实例,而不是一个抽象的概念;(万物皆对象)
类对象实例化之后会返回一个自己的对象,如:Student对象就是一个Student类的具体实例,同一个类可以产生不同的对象,但是它们拥有共同的特性
如:Student stu1 = new Student();
Student stu2 = new Student(); stu1 与 stu2 就是两个对象,但是他们的特性相同
9、对象的创建与初始化
当使用new关键字创建对象时,此时java会给对象分配内容空间,还会给创建好的对象进行默认的初始化,以及对该类中构造器的调用
构造器:
构造器即为构造方法,在创建的对象的时候必须进行调用;
注:1)构造方法名必须与类名相同;2)必须无返回值,且不能写void
构造类型:
构造分为无参构造和有参构造(全参构造、部分参构造)
注:当方法中只有无参构造的时候,系统会默认进行创建,此时可省略
若方法中有有参构造,那么则需要加上无参构造,避免在创建对象的时候发生错误
10、Java程序在运行的时候,首先会加载一些程序所要运行的模板
面向对象三大特征:封装、继承、多态
11、封装:
见名知意,就是把一个东西(对象)装起来,只留一下一个小口子,与外界进行交流
当方法中的属性私有(private)的时候,就要使用get/set来达到方法私有属性操作的目的;
意义:
1)安全性提高;
2)隐藏了代码的细节;
3)统一了接口;
4)系统的可维护性增强;
12、继承
本质就是对某一批类的抽象,从而实现对现实世界更好的建模
注:1)Java中的类只有单继承,没有多继承
2)父类方法中的私有属性,子类无法继承
3)子类调用父类的无惨构造时,super()一定要写在最前面,
4)super只能出现在子类的方法或者构造方法中
5)super()和this()不能同时使用。
比较:
this()本类的构造方法 super()父类的构造方法
13、方法的重写
当继承发生的时候,就会涉及到方法的重写,重写与重载不相同,重写是方法的重新编写,和属性无关
注:
1)方法名必须相同
2)参数列表必须相同
3)修饰符:范围可以扩大但是不能缩小,public > protected > default > private
4)抛出的异常:范围可以被缩小,但是不能扩大,classNotFoundException(小) -> Exception(大)
为什么重写:
父类的方法功能,子类不一定需要,或者不一定满足自己的需求;
14、多态
本质可以理解为一句话:父类引用指向子类对象,如:Service service = new ServiceImpl();
同一方法可以根据发送对象的不同而采用多种不同的行为方式;
当含有static关键字的区别:
静态方法的调用只和左边定义的数据类型有关;
非静态方法的调用:就是对父类发的重写
注意:
1)多态是方法的多态,不是属性的多态,属性没有多态;
2)父类和子类有一定的联系,进行类型转换可能会出现类型类型转换异常:ClassCastException;
3)存在条件:继承关系,方法需要重写,父类引用指向子类对象;
下列情况不能重写:
1、static方法,它属于类,不属于实例
2、final修饰的常量
3、private修饰的方法
15、instanceof,类型判断
1)用来判断一个对象是什么类型
如:Student stu = new Student();
System.out.println(stu instanceof Student);
2)可以用来判断打印语句能不能编译通过,若能通过,则存在父子关系,若不能通过,则不存在父子关系;
16、引用类型转换(与基本数据类型转换类似)
低转高,自然转换,如:Person person = new Student();
高转低,强制类型转换,需要在对象前加括号,里面写上要转换的类对象,Student stu = (Student) person;
注意:
子类转换为父类时,可以回丢失一些自己本来的一些方法,也就是父类引用指向子类对象,所以通常会方法实现接口方法重写;
17、导入静态包
java.lang包下的类,当我们调用的时候,需要写类名.方法名()来调用,如果我们想直接调用方法,不想写类名的时候,由于lang包下的类里面的方法都是static关键字修饰的,所以需要导入对应的包方法; 如:import static java.lang.Math.random;
18、类与接口
类是单继承的,接口可以多继承(其实是通过实现多个接口侧面验证接口可以多继承)
19、抽象类:
1)抽象类不能使用new关键字来创建对象,只能靠子类去实现,它是一种约束;
2)抽象类中可以写普通的方法
3)抽象方法必须在抽象类中,即:若方法中有abstract关键字,那么类的声明中也必须有abstract关键字;
注意:
抽象类既然不能通过new关键字创建对象,那么它的方法中是不存在构造器的;
抽象类存在的意义:提高开发效率
20、接口
接口是一种规范,定义的是一组规则,它的本质就好比契约,制定好后大家共同遵守,它自己无法写方法,是一种专业的约束,它实现了约束和实现的分离:面向接口编程;
普通类中,只有具体的方法实现;
抽象类中,有具体的实现和规范(抽象方法),两者都有,只是不能new
OO(面向对象)的精髓:是对对象的抽象,最能体现这一点的就是接口。所以为什么当我们讨论设计模式的时候,只针对具有抽象能力的语言(如:java、C++、C#),就是因为设计模式研究的实际就是如何合理的去抽象;
21、接口的实现
通过implements 关键字来实现接口,实现了接口的类,那么就要重写几口中的所有方法;
注意: 可以实现多个接口(侧面验证了接口可以多继承)
作用:
1)接口中的方法,都是public abstract修饰的
2)接口中的常量,都是public static final 修饰的,但不建议在接口中进行使用(在平时要锻炼自己的抽象思维,通过接口来定义一个系统,架构师不是梦)
3)它是一种约束
4)定义的一些方法,去让不同的人去实现
5)接口不能被实例化,也就是不能new,因为接口中没有构造方法
6)通过implements关键字可以实现多个接口,但必须要重写接口中所有方法
22、内部类
常用的是匿名内部类