【JAVA进阶】包、权限修饰符、抽象类、接口

个人主页:个人主页

系列专栏:JAVASE基础

目录

1.什么是包?

2.什么是权限修饰符?

3.final

4.常量

5.枚举

6.抽象类

7.模板方法模式

8.接口


1.什么是包?

  • 包是用来分门别类的管理各种不同类的,类似于文件夹、建包利于程序的管理和维护。
  • 建包的语法格式:package 公司域名倒写.技术名称。报名建议全部英文小写,且具备意义
package com.tsj.javabean;
public class Student {
       
}
  • 建包语句必须在第一行,一般IDEA工具会帮助创建

导包  

  • 相同包下的类可以直接访问,不同包下的类必须导包,才可以使用!导包格式:import 包名.类名;
  • 假如一个类中需要用到不同类,而这个两个类的名称是一样的,那么默认只能导入一个类,另一个类要带包名访问。

2.什么是权限修饰符?

  • 权限修饰符:是用来控制一个成员能够被访问的范围。
  • 可以修饰成员变量,方法,构造器,内部类,不同权限修饰符修饰的成员能够被访问的范围将受到限制。

权限修饰符的分类和具体作用范围:

  • 权限修饰符:有四种作用范围由小到大(private -> 缺省 -> protected - > public )

修饰符

同一 个类中

同一个包中其他类

不同包下的子类

不同包下的无关类

private

缺省

protected

public

学完权限修饰符需要具备如下能力

  • 能够识别别人定义的成员的访问范围。
  • 自己定义成员(方法,成员变量,构造器等)一般需要满足如下要求:
  • 成员变量一般私有。 方法一般公开。
  • 如果该成员只希望本类访问,使用private修饰。 如
  • 果该成员只希望本类,同一个包下的其他类和子类访问,使用protected修饰。 

3.final

final的作用

  • final 关键字是最终的意思,可以修饰(类、方法、变量)
  • 修饰类:表明该类是最终类,不能被继承。
  • 修饰方法:表明该方法是最终方法,不能被重写。
  • 修饰变量:表示该变量第一次赋值后,不能再次被赋值(有且仅能被赋值一次)。

final修饰变量的注意

  • final修饰的变量是基本类型:那么变量存储的数据值不能发生改变。
  • final修饰的变量是引用类型:那么变量存储的地址值不能发生改变,但是地址指向的对象内容是可以发生变化的。

4.常量

常量

  • 常量是使用了public static final修饰的成员变量,必须有初始化值,而且执行的过程中其值不能被改变。
  • 常量名的命名规范:英文单词全部大写,多个单词下划线连接起来。
public static final String SCHOOL_NAME  = "CSDN";
public static final String LOGIN_NAME  = "ROOT";
public static final String PASS_WORD  = "1234";

常量做信息配置的原理、优势

  • 在编译阶段会进行“宏替换”:把使用常量的地方全部替换成真实的字面量。
  • 维护系统容易,可读性更好。

5.枚举

枚举的概述

  • 枚举是Java中的一种特殊类型
  • 枚举的作用:"是为了做信息的标志和信息的分类"。

  • 定义枚举类的格式:

修饰符   enum   枚举名称{            

第一行都是罗列枚举类实例的名称。

}

enum Season{
SPRING , SUMMER , AUTUMN , WINTER;
}

 

枚举的特征:

  • 枚举类都是继承了枚举类型:java.lang.Enum
  • 枚举都是最终类,不可以被继承。
  • 构造器都是私有的,枚举对外不能创建对象。
  • 枚举类的第一行默认都是罗列枚举对象的名称的。
  • 枚举类相当于是多例模式。

6.抽象类

抽象类

  • 在Java中abstract是抽象的意思,可以修饰类、成员方法。
  • abstract修饰类,这个类就是抽象类;修饰方法,这个方法就是抽象方法。

修饰符 abstract class 类名{     

修饰符 abstract 返回值类型 方法名称(形参列表);

}

public abstract class Animal{
public abstract void run();
}

 注意事项

  • 抽象方法只有方法签名,不能声明方法体。
  • 一个类中如果定义了抽象方法,这个类必须声明成抽象类,否则报错。

抽象的使用场景

  • 抽象类可以理解成不完整的设计图,一般作为父类,让子类来继承。
  • 当父类知道子类一定要完成某些行为,但是每个子类该行为的实现又不同,于是该父类就把该行为定义成抽象方法的形式,具体实现交给子类去完成。此时这个类就可以声明成抽象类。

特征和注意事项

  • 类有的成员(成员变量、方法、构造器)抽象类都具备
  • 抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类
  • 一个类继承了抽象类必须重写完抽象类的全部抽象方法,否则这个类也必须定义成抽象类。
  • 不能用abstract修饰变量、代码块、构造器。
  • 最重要的特征:得到了抽象方法,失去了创建对象的能力(有得有失)

final和abstract是什么关系?

  • 互斥关系
  • abstract定义的抽象类作为模板让子类继承,final定义的类不能被继承。
  • 抽象方法定义通用功能让子类重写,final定义的方法子类不能重写。

7.模板方法模式

什么时候使用模板方法模式

使用场景说明:当系统中出现同一个功能多处在开发,而该功能中大部分代码是一样的,只有其中部分可能不同的时候。

【JAVA进阶】包、权限修饰符、抽象类、接口_第1张图片

 

模板方法模式实现步骤

  • 1、定义一个抽象类。
  • 2、定义2个方法,一个是模板方法:把相同代码放里面去,不同代码定义成抽象方法
  • 3、子类继承抽象类,重写抽象方法。

模板方法我们是建议使用final修饰的,这样会更专业,那么为什么呢?

答:模板方法是给子类直接使用的,不是让子类重写的, 一旦子类重写了模板方法,则模板方法就失效了,因此,加上final后可以防止子类重写了模板方法,这样更安全、专业。

模板方法模式解决了什么问题?  

  • 提高了代码的复用性  
  • 模板方法已经定义了通用结构,模板方法不能确定的部分定义成抽象方法,交给子类实现,因此,使用者只需要关心自己需要实现的功能即可。

8.接口

接口的定义与特点

  • 接口的格式如下:

接口用关键字interface来定义

public interface 接口名 {       
// 常量        
// 抽象方法 
}
  • JDK8之前接口中只能是抽象方法和常量,没有其他成分了。
  • 接口不能实例化。
  • 接口中的成员都是public修饰的,写不写都是,因为规范的目的是为了公开化。

什么是接口

  • 接口也是一种规范。

【JAVA进阶】包、权限修饰符、抽象类、接口_第2张图片

接口的用法 

  • 接口是用来被类实现(implements)的,实现接口的类称为实现类。实现类可以理解成所谓的子类。

修饰符 class 实现类 implements 接口1, 接口2, 接口3 , ... {

}

实现的关键字:implements

  • 从上面可以看出,接口可以被类单实现,也可以被类多实现。 

接口实现的注意事项:

一个类实现接口,必须重写完全部接口的全部抽象方法,否则这个类需要定义成抽象类。

基本小结

  • 类和类的关系:单继承。
  • 类和接口的关系:多实现。
  • 接口和接口的关系:多继承,一个接口可以同时继承多个接口

接口多继承的作用

  • 规范合并,整合多个接口为同一个接口,便于子类实现。

补充知识:JDK8开始接口新增的方法

第一种:默认方法

  • 类似之前写的普通实例方法:必须用default修饰
  • 默认会public修饰。需要用接口的实现类的对象来调用
default void run(){
System.out.println("--开始跑--");
}

第二种:静态方法

  • 默认会public修饰,必须static修饰。
  • 注意:接口的静态方法必须用本身的接口名来调用。
static void inAddr(){
System.out.println("我们的地址");
}

第三种:私有方法

  • 就是私有的实例方法:,必须使用private修饰,从JDK 1.9才开始有的。
  • 只能在本类中被其他的默认方法或者私有方法访问。
private void go(){
System.out.println("--准备--");
}

注意:JDK8新增的3种方法我们自己在开发中很少使用,通常是Java源码涉及到的,我们需要理解、识别语法、明白调用关系即可。

接口的注意事项

  • 1、接口不能创建对象
  • 2、一个类实现多个接口,多个接口的规范不能冲突
  • 3、一个类实现多个接口,多个接口中有同样的静态方法不冲突。
  • 4、一个类继承了父类,同时又实现了接口,父类中和接口中有同名方法,默认用父类的。
  • 5、一个类实现了多个接口,多个接口中存在同名的默认方法,可以不冲突,这个类重写该方法即可。
  • 6、一个接口继承多个接口,是没有问题的,如果多个接口中存在规范冲突则不能多继承。

你可能感兴趣的:(【JAVA基础+进阶】,java,开发语言)