包
什么是包?
l包是用来分门别类的管理各种不同技术类的,类似于文件夹、建包利于技术的管理和维护
l建包的语法格式:公司域名反写.技术名称。包名建议全部英文小写,且具备意义
l建包语句必须在第一行,IDEA工具会自动生成建包的语句。
什么是导包?
l相同包下的类使用无需导包,java.lang包下的类无需导包。
l其他情况下的类使用时需要导包。
导包格式:import 包名.类名;
权限修饰符
什么是权限修饰符
权限修饰符:用来控制成员能被访问的范围
可以修饰成员变量,方法,构造器,内部类,不同权限修饰符修饰的成员能够被访问的范围是不同的
权限修饰符的总结
成员变量一般私有。
类、方法、构造器一般公开。
如果该成员只希望本类访问,修饰private修饰。
如果该成员只希望在本包和子类中访问,使用protected修饰。
如果该成员只希望在本包中访问,使用缺省(默认不写)修饰符。
常用的权限修饰符是 public 和 private。
public通常用于修饰类和方法,private用于修饰成员变量。
final(重)
final是最终的意思,可以修饰类,方法,变量。
final 修饰的特点
修饰类:表明该类是最终类,不能被继承。
修饰方法:表明该方法是最终方法,不能被重写。
修饰变量:表明该变量是常量,变量第一次赋值后,不能再次被赋值。
代码块
代码块的概述:
代码块是类的成分之一(成员变量、构造器、方法, 代码块,内部类)。
在Java类中,使用{}括起来的代码被称为代码块。
代码块分为:
构造代码块
格式: { }
特点:每次构造方法执行之前,都会先执行构造代码块的代码。
使用场景:将多个构造方法中相同的代码,抽取到构造代码块中,提高代码的复用性。
静态代码块
格式:static{ }
特点:随着类的加载而触发执行,并且只会执行一次。
使用场景:在类加载的时候做一些静态数据初始化的操作,以便后续对象可以使用。
抽象类(重)
如果一个类中存在抽象方法,那么该类就必须声明为抽象类。
权限修饰符 abstract class 类名{
}
抽象类特点:
抽象类无法创建对象
抽象类可以没有抽象方法,但有抽象方法的一定是抽象类。
子类继承抽象类要么重写所有抽象方法,要么子类必须定义为抽象类。
抽象类和普通类的区别:
l抽象类和普通类相比,可以说是有得有失。
有得:得到定义抽象方法的能力。
有失:失去创建对象的能力。
除此之外,普通类有的,抽象类都具备。
设计模式_模板方法模式
设计模式
设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。
使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、重用性。
模板方法模式
规定一个操作的基本流程,而将某些实现细节定义成抽象方法。
子类通过重写抽象方法,并调用从父类继承而来的模板方法即可。
模板方法优点
规范了不变的流程部分,扩展了可变的细节部分
提取公共代码,利于后期维护
接口(重)
接口的定义
Java中使用interface关键字定义接口
格式:
权限修饰符 interface 接口名{
}
注意:
接口的权限修饰符只能是public或者缺省(不写)。
接口成员的特点
JDK7及之前,接口中只能定义常量和抽象方法,不能有其他成分。
接口中没有构造方法,所以接口不能创建对象。
常量:默认都是public static final修饰的,可以省略不写。
抽象方法:默认都是public abstract修饰的,可以省略不写
接口的用法:
接口是用来实现的,实现接口的类称为实现类。
一个类可以实现多个接口,实现关键字是implements。
格式:
权限修饰符class类名 implements 接口1,接口2.接口3{
}
注意:
一个类实现接口,必须重写接口的所有抽象方法,否则这个类需要重新定义成抽象类。
接口的多继承:
接口和接口是多继承的关系,一个接口可以同时继承多个接口。
格式:
权限修饰符 interface 接口名 extends 接口1, 接口2, 接口3{
}
接口多继承的作用:
规范合并,整合多个接口为同一个接口,便于子类的实现。
JDK8之后接口新增方法(了解)
1)默认方法
方法必须用default修饰
调用:创建接口的实现类对象 来调用
2)静态方法
方法使用static修饰。
调用:用接口名 来调用。
3)私有方法
使用 private修饰的, 可以包含私有成员方法和私有静态方法。
调用:私有方法只能在接口内调用。
接口的使用注意(了解)
1.子类继承父类并实现接口:
当一个类,既继承父类,又实现接口时,父类中成员方法与接口中的默认方法相同
子类就近选择执行父类的成员方法。
2.类实现多个接口:
实现的多个接口有相同的抽象方法时,实现类只需要重写一次。
实现类的多个接口有相同的默认方法时,实现类需要重写默认方法。(继承多接口也一样)
实现的多个接口有相同的静态方法时,使用不会冲突,因为静态方法通过各自的接口名调用。