面向对象概述
面向对象是把解决的问题按照一定的规则划分为多个独立的对象,通过多个对象之间的配合来实现应用程序的功能。这样子当应用程序的功能发生变动时,只需要修改个别对象就可以了,从而使代码更容易维护
面向对象的特点
封装,继承和多塔器
封装
封装就是讲对象的属性和行为封装起来,不需要让外界知道具体的实现细节。
一般来说都是把一些对象的属性私有化,同时提供一些可以被外界访问的属性的方法
继承
类的继承是指在一个现有类的基础上去构建一个新的类,子类会自动拥有父类所有可以继承的方法和属性。
同时子类也可以对父类的方法进行重写,同时也可以声明自己的方法和属性
多态
多态是指在程序中允许出现重名现象,他指在一个类中定义的属性和方法被其他类继承后,他们可以具有不同的数据类型或表现出不同的行为
多态存在的三个必要条件
继承,重写和父类引用指向子类对象
注意:重写需要和被重写的方法具有相同的方法名,参数列表和返回值类型
另外子类重写父类方法时,子类的访问权限不能比父类被重写的方法更严格,例如父类方法是pubic,子类被重写的方法就不能是protected
面向对象的五大基本原则
单一职责原则
类的功能要单一,
开放封闭原则
一个模块对拓展是开放的,对修改是关闭的、
里式替换原则
子类可以代替父类出现在父类能够出现的任何地方
接口分离原则
尽量把不同的功能拆分在不同的接口,而不要用通用的接口
目录
抽象类和接口的不同
参数 | 抽象类 | 接口 |
声明 | 抽象类使用abstract声明 | 使用interface |
实现 | 子类使用extend来继承抽象类,如果子类不是抽象类就必须要实现抽象类里的所有抽象方法 | 子类使用implement关键字来实现接口,他需要提供接口中所有方法的实现 |
构造器 | 抽象类可以有自己的构造器,但是抽象类不可以被实例化 | 接口没有构造方法 |
访问修饰符 | 任意访问修饰符 | 默认为public ,不允许被定义为private和protected |
继承 | 单继承 | 一个类可以实现多个接口,一个接口也可以继承多个接口 |
字段声明 | 任意字段 | 默认都是static final |
抽象类和普通类的区别
抽象类不可以被实例化,
抽象类可以不包含抽象方法,含有抽象方法的一定是抽象类
抽象类的抽象方法没有方法体
抽象类不可以用final方法修饰,因为抽象类就是要用用来继承的
内部类
内部类分为静态内部类,匿名内部类和成员内部类和局部内部类
静态内部类
定义在类内部的静态类就是静态内部类,静态内部类可以访问外部类所有静态的变量
成员内部类
定义在类内部,成员位置上的非静态类
局部内部类
定义在方法中的类,就是局部内部类
匿名内部类
重写和重载
重写
方法名,参数列表相同,返回值类型相同,子类的访问控制权限不能比父类小
重载
方法名相同,参数类型不同(参数类型,参数数量,参数顺序),返回值类型随意
对象相等判断
== 和equals的区别是什么
==判断的是两个对象的地址是不是相等,即,判断两个对象是不是相等(基本数据类型==判断的是值,引用数据类型==比较的是内存地址)
equals(),判断两个对象是否相等,有两种情况
1.equals()没有被重写时,等价于==
2, eequals()被重写,则比较的是两个对象的内容,内容相等则返回true
值传递
java中只支持值传递
也就是说,方法中的参数(此时的参数是一个基本数据类型)只是一个拷贝,方法不能修改传递给他的任何参数的变量的内容,参数是引用数据类型时,会改变他的属性的内容
java包
JDK 中常用的包有哪些
java.lang:这个是系统的基础类;
java.io:这里面是所有输入输出有关的类,比如文件操作等;
java.nio:为了完善 io 包中的功能,提高 io 包中性能而写的一个新包;
java.net:这里面是与网络有关的类;
java.util:这个是系统辅助类,特别是集合类;
java.sql:这个是数据库操作的类。
import java和javax有什么区别
刚开始的时候 JavaAPI 所必需的包是 java 开头的包,javax 当时只是扩展 API 包来说使用。然而随着时间的推移,javax 逐渐的扩展成为 Java API 的组成部分。但是,将扩展从 javax 包移动到 java 包将是太麻烦了,最终会破坏一堆现有的代码。因此,最终决定 javax 包将成为标准API的一部分。
所以,实际上java和javax没有区别。这都是一个名字。