一、封装
1、概述
不直接提供访问的数据,而是提供访问的接口。
2、包机制
package: 设置的是编译之后的class文件的保存目录,和源文件没有关系
如果没有设置package语句,则class文件和 java文件在同目录
作用
1.为了解决命名冲突问题
2.package语句只能出现在java源文件的第一行
3.通常采用公司域名倒序的方式,
例如:com.tledu.oa.system
com.公司名.项目名.模块名
4.完整的类名是带有包名的
带有包名的类:
编译: javac -d 生成路径 源文件
javac -d ./ -encoding utf-8 A.java
java com.tledu.zrz.A
public class com.tledu.zrz.A{
}
导入机制
import 包;
import com.xxx.aaa.A;//导入A类
import com.xxx.aaa.*;//导入这个包下的所有类
注意:java.lang.*下的类是核心类,不需要导入
静态导入
在访问这个类的静态属性的时候,可以直接写名字,不需要加类名前缀。
3、 权限控制修饰符
访问控制符
private 只能在本类中使用
default 不加就是default,在同一个包中都可以访问
protected 同包,或者有继承关系
public 都可以访问
二、继承
1、概述
从已有类中派生出新的类,新的类能有已有类的非私有属性和行为,并可以拓展新的属性和行为
目的:代码重用
1.java中只支持单继承,一个类只能有一个父类,但是一个类可以拥有多个子类
2.private私有的属性不能继承
3 如果一个类没有显示继承另一个类,则默认继承Object(java.lang.Object)
Object是java提供的根类(祖宗)
任何类都直接或者间接继承Object
2、语法
class 子类名 extends 父类名{}
3、super关键字
保存了父类型特征,可以理解为是父类对象
1 区分子类和父类同名的变量方法
2 super(....)只能在子类构造方法第一行,用来调用父类构造放大
this(.....)也是必须在第一行所以this(...)和super(....)不能同时出现
如果构造方法中没有this(....) 也没有super(....) 则构造方法第一行默认有supre() 调用无参构造
3.1super 和this的区别
super其实没有指向父类的对象,而是指向了父类的数据块,this是当前对象的引用
super:保存了父类型特征,可以理解为是父类对象
3.2解决的问题
区分父类和子类重名的属性或方法
super(…)只能用在子类构造方法第一行,用来调用父类构造方法
注意:this(…)也是必须在构造方法第一行,所以this()和super()不能同时出现
如果构造方法周总没有this(),也没有super() 则构造方法第一行默认有super() 调用父类无参构造
3.3实例语句块的执行
代码
父类
class Father{
public Father(){
System.out.println("父类的构造方法执行了");
}
}
子类
class Son{
{
System.out.println("实例语句块执行了");
}
public Son(){
super();
System.out.println("子类的构造方法执行了");
}
}
测试:
class Main{
public static void main(String[] args) {
//测试实例语句块的执行时机
Son son = new Son();
}
}
运行结果:
结论:
实例语句块的执行时机是父类构造方法执行完成之后,也就是super()方法执行之后
4.方法重写
什么时候要重写
当父类不能满足子类需求的情况下,需要使用到方法重写
重写条件
有继承关系的体系中
方法名相同,参数列表相同,返回值相同
不能比原方法拥有更低的访问权限
不能比原方法拥有更宽泛的异常
覆写,特指成员方法,和静态比那里,静态方法,成员变量无关.
Override和Overload区别:
override是重写,overload是重载
overload解决的问题是方便记忆,而override解决的问题是满足子类的需求
//父类
class Father{
public void m1(int a){
//这里是父类方法的具体实现
}
}
//子类
class Son extends Father{
public void m1(int a){
//这里是子类方法的具体实现
}
}
5.final关键字
final是一个修饰符,表示最终的
作用:
final修饰的类不能被基础,
final修饰的成员方法,不能被重写
final修饰的变量没有默认值,并且不能二次赋值,必须显示赋值
常量:一般使用 public static final修饰 简称psf,整个程序生命周期值不能被修改
三、多态
父类引用指向子类对象,使用父类类型声明的变量保存子类对象的引用
语法:父类 变量 = new 子类();
java中提供了两种多态形式
1.编译时多态
编译时多态是静态的,主要指方法重载,他根据不同的参数列表来区分不同的方法
编译之后就会变成不同的方法,在运行时,就谈不上多态了,只是不同的两个方法而已
2.运行时多态
运行时多态是动态的,主要是指动态绑定来实现,指子类实现父类的方法
四、软件六大设计原则
1、单一职责原则
功能职责单一,只拥抱一种变化。
2、里氏替换原则
所有能使用父类的地方,都有可以换成子类。
3、依赖倒置原则
高层依赖抽象,细节依赖抽象
4、接口隔离原则
最小接口原则,不然就需要实现很多不必要的方法。
5、开闭原则
对修改关闭,对拓展开放。
6、迪米特原则
最少接触原则,一个类对于其他类知道的越少越好,就是说一个对象应当对其他对象有尽可能少的了解,只和朋友通信。