【Java基础09】类、枚举和接口

1. 包 1.1 什么是包

  • 包主要是分门别类的来管理类,类似于文件夹。
  • 建包语法:package 公司域名.技术名称,建议全部小写
  • 建包语句必须在第一行
1.2 导包
  • 相同包下类可以直接访问,不通包下可以通过导包引用类。
  • 如果需要导相同类,在类上只能导入一个包路径,类中如果需要再引用相同类需要使用全路径名:包名.类名();
  • 格式:import 包名.类名 / import 包名.类名
2. 权限修饰符 权限修饰符是来修饰成员访问的范围,权限修饰符可以修饰成员变量,构造器,方法和内部类。
权限修饰符访问范围如下:
修饰符 同一类 同一包中其他类 不同包下子类 不同包下无关类
private
缺省
protected
public
3. final和常量 3.1 fianl fianl表示最终的,可以修饰变量,方法和类
  • 修饰变量:该变量仅只能赋值一次
  • 修饰方法:该方法为最终方法,不可以被重写
  • 修饰类:该类为最终类,不能被继承
注意事项:
修饰基础类型:被第一次赋值后不能被改变。
修饰引用类型:对象引用地址不能被改变,但地址对象内部信息可以修改。
示例:
public class FinalTest { public static final int num = 10; public static final Dog dog = new Dog("二哈", 10); public static void main(String[] args) {System.out.println(num); System.out.println(dog.getName()); // 程序报错 // num = 20; dog.setName("三哈"); System.out.println(dog.getName()); } }

3.2 常量
  1. 常量是使用public static final修饰的变量,必须初始化值并且在执行过程中不能修改值。
  2. 常量常用于文件配合,提高代码可读性,便于后期维护。
  3. 常量命名规范:单词名称大写,多个单词之间使用下划线连接
执行原理:
在编译过程进行替换,会把所有常量替换成字面量。
替换成字面量提高执行的效率。
4. 枚举,接口和抽象类 4.1 枚举(enum) 枚举是java的一种特殊类型,是为了做信息的标志和分类
格式:
修饰符 enum 枚举类型 { ... }

示例:
public enum Direction { UP("向上", 1), DOWN("向下", 2), LEFT("向左", 3), RIGHT("向右", 4); private String name; private int flag; private Direction(String name, int flag) { this.name = name; this.flag = flag; }public String getName() { return name; }public void setName(String name) { this.name = name; }public int getFlag() { return flag; }public void setFlag(int flag) { this.flag = flag; } }

枚举的特征:
  1. 枚举类都是继承java.lang.Enum
  2. 枚举类是最终类,不可以被继承
  3. 构造器都是私有,不能被实例化
  4. 枚举类第一行默认都是写枚举类对象的名称
4.2 接口(interface) java中的接口是一种规范,类似于生活当中的接口。比如现在市面上的Type-C充电口,这就是一种规范,大家都按照这样设计,那样的话就可以通用。约束了一致的内容也开放了自定义实现。
4.2.1 定义格式
修饰符 interface 类名 { ... }

4.2.2 特点
  • JDK8前内部只能有抽象方法和常量(下面介绍)
  • 接口不能实例化
  • 接口中的所有成员都是public,默认是的写不写都是
4.2.3 接口使用(implements)
格式:
修饰符 class 类名 implements 接口类名1、接口类名2...{
...

}
  • 接口是用来被实现的实现接口的类被称之为实现类,也可以理解为子类,使用关键字implements
  • 接口可以被单实现,也可以被多实现
  • 一个类实现接口必须重写所有抽象方法,否则实现类为抽象类
  • 继承与实现:①类只能单继承 ②类可以多实现 ③接口之间可以实现多继承
4.2.4 JDK8后接口新规范
当接口被定义下来后,需要很多子类来实现。后期扩展维护时,需要添加新抽象方法,这时所有实现类必须都要实现,否则程序编译失败。这样导致出现很多不必要工作量。JDK8后新增了新规范。
  1. 默认方法
    方法定义格式类似类成员方法,修饰符必须是default。该方法需要接口实现类来调用。
示例:
public interface Interface1 {void show(); default int add(int x, int y) { return x + y; }default int addNum(int x, int y) { return add(x, y); }}

public class InterfaceImpl implements Interface1 { @Override public void show() { System.out.println("实现了Interface1的show方法"); int a = addNum(1, 2); System.out.println("调用抽象类默认方法:" + a); }public static void main(String[] args) { InterfaceImpl anInterface = new InterfaceImpl(); anInterface.show(); } }

  1. 静态方法
    静态方法是用public(默认修饰符)修饰,方法需要添加static。接口静态方法必须用接口本身进行调用。
// 接口方法,写在Interface1接口中 static double getPI() { return 3.14; }// 执行接口静态方法 Interface1.getPI();

  1. 私有方法(jdk1.9后)
    方法必须使用private修饰,只能在本类被默认和私有方法调用
示例:
private void go(){ System.out.println("开始执行接口私有方法"); }

4.2.5 注意事项
  • 接口不能实例化对象
  • 一个类可以实现多个接口,多个接口中的静态方法不冲突
  • 一个类继承父类同时实现多个接口,如果接口和父类出现同名方法,默认使用父类
  • 一个类单继承多实现
4.3 抽象类(abstract) 在java中abstract是抽象的意思,如果一个类中有不确定的方法,需要不同的子类来实现,则可以用abstract创建抽象类,只需定义方法名,不需要具体实现。abstract关键词可以修饰类和方法。
// 抽象类格式 修饰符 abstract 类名 { }// 抽象方法 修饰符 abstract 返回类型 方法名(形参列表...);

// 示例 public abstract class AbstractTest { public abstract void show(); }

抽象类的特征和注意事项:
  1. 抽象类不能进行实例化
  2. 类的成员抽象类都具备
  3. 抽象类不一定存在抽象方法,存在抽象方法的类一定是抽象类
  4. 继承抽象类的子类一定重写抽象方法,否则这个类也是抽象类
  5. abstract不能修饰成员变量、构造器和代码块
使用场景:
可以把抽象方法看成是一个模板,当大部分功能都相同,但是只有个别功能独特。这时就可以使用抽象类,让使用者继承抽象类重写方法。
【【Java基础09】类、枚举和接口】抽象类的优势:
  • 提高代码的复用性
  • 需要实现的方法定义成抽象法,使使用者只需要关心要实现的功能
    • *
本章结束,用于个人学习和小白入门,大佬勿喷!希望大家多多点赞收藏支撑支撑!
源码 【GitHub】 【码云】

    推荐阅读