java中的其他类:接口、抽象类、枚举类、内部类、final关键字、Lombok插件

一:接口

使用继承和多态来自己实现一下USB接口的操作;接口是一个特殊的Java类,接口可以做到多继承(接口的继承称之为实现,接口可以多实现)。

1、基本接口

1、1接口的定义、声明

  • Java类使用的是class关键字,接口使用interface关键字声明
  • 语法:public interface 接口的名字
  • 接口中都会有哪些东西
    A:属性
    定义属性如下
    在这里插入图片描述
    属性被编译后的结果如下
    在这里插入图片描述
    由此可见,接口中的属性默认是使用public static final修饰,在声明时默认赋予初始值
    B:方法
    在这里插入图片描述
    被编译之后的结果
    在这里插入图片描述
    总结:
  • 在接口中,没有代码块、没有静态代码块、没有构造方法、没有普通方法、也没有最终方法
  • 在接口中可以有静态方法
  • 在接口中可以有抽象方法:使用abstract修饰的没有方法体{ }的方法叫做抽象方法,默认抽象方法是使用public abstract修饰的
  • 接口也不能像其他类那样new自己
  • 接口中的属性都是公共,静态,常量,必须在声明的时候赋予初始值

1、2接口如何使用

接口不能像其他类一样直接的去new自己
接口的实例化是使用已知实现子类,采用多态的思想来实例化对象

1、2、1接口的实现

实现方法:使用implements关键字来实现接口,实现接口的子类必须重写该接口的所有抽象方法,而且重写后的方法必须有具体的方法体
在这里插入图片描述

1、2、2具体的调用

  • 调用静态方法:直接使用接口名.方法名调用
    注意:静态方法不能被继承,也不能被重写
    在这里插入图片描述
  • 对于默认方法而言:可以继承,可以重写,想怎么用就怎么用
    在这里插入图片描述
    注意:如何调用父类接口中的默认方法
    使用父类名.super.方法名
    在这里插入图片描述

1、2、3使用匿名对象的写法来调用

匿名对象就是,实例化一个对象,没有具体的引用。匿名对象只能用一次,匿名对象不能被重复使用
在这里插入图片描述
接口的总结:

  • 接口可以自己实例化自己,在实例化的时候,使用new 接口名(){ 重写并实现接口中的所有抽象方法 };
  • 接口可以使用多态的思想,用自己的已知实现子类来实例化自己。最终接口的方法其实就是调用已知实现子类重写的方法
    在这里插入图片描述
  • **接口的作用:**接口是用来做方法的规定的。具体要根据最终实现自己的子类来决定具体应该怎么做。一定要使用多态的思想。接口就是用来规定方法的。
  • 注意:默认方法和静态方法都是jdk1.8版本之后才有的
  • 接口所在的包是dao包,接口的实现包在dao.imp包

二:函数式接口

有且仅有一个抽象方法的接口称为抽象接口,使用注解@FunctionalInterface类判断该接口是不是函数式接口

1、声明

在这里插入图片描述

2、函数式接口的使用

第一种:原始用法:使用已知实现子类、使用匿名对象的写法
new 接口名字(){ 重写抽象方法 };
第二种Lambda表达式的用法(为1.8之后的新特性)

  • Lambda表达式主要是1.8jdk中为了简化对函数式接口的实例化操作
  • 语法:函数式接口类型变量 = (参数…) -> { 重写的方法中具体的执行代码 }
    ()在参数只有一个的情况下可以省略
    { }在方法只有一条执行代码的时候可以省略
    他的参数可以不指定类型
  • 分为四种情况
    无参数无返回值
    有参数无返回值
    无参数有返回值
    有参数有返回值
package com.xingyun.函数式接口;
/**
 * 函数式接口的声明
 * @author langlang
 *
 * 2020年11月2日下午9:53:25
 */
@FunctionalInterface
public  interface  FunInter {
	
	
	
	//没有参数没有返回值
	void  eat();
	
}

@FunctionalInterface
interface   FunInter01{
	
	//有参数没有返回值
	void  eat(int  a,int  b);
}


@FunctionalInterface
interface   FunInter02{
	
	//没有参数有返回值
	int  eat();
}



@FunctionalInterface
interface   FunInter03{
	
	//有参数有返回值
	int  eat(int  a,int  b);
}

package com.xingyun.函数式接口;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;
/**
 * 测试类
 * @author langlang
 *
 * 2020年11月2日下午10:30:45
 */
class FunInterTest {

	@Test
	//普通匿名对象方式来实例化函数式接口
	void test() {
		//没有参数没有返回值
		new  FunInter() {
			@Override
			public void eat() {
				System.out.println("开始吃饭");
			}
		}.eat();
	}
	
	
	//函数式接口,lambda表达式的实例化调用
	@Test
	void  test01(){
	    // 没有参数没有返回值
		//实例化接口    对象
		FunInter  fi=()->{ System.out.println("啥啥都别吃了");};
		fi.eat();
		
	}
	
	
	@Test
	void   test02() {
		//有参数没有返回值
		//实例化对象,接口,()中的参数为重写抽象方法之后的形式参数
		FunInter01  fi =(int a,int b)->{  System.out.println("他们的总和是"+(a+b));  };
		fi.eat(10, 40);
		
	}
	
	
	
	@Test
	void test03() {
		//没有参数有返回值
		FunInter02  fi =()->{ return  200; };
		System.out.println(fi.eat());
	}
	
	
	@Test
	void test04() {
		//有参数有返回值
		FunInter03  fi = (int a,int b)->{ 
			int sum = a+b;
			return  sum;
		};
		
		int eat = fi.eat(40, 59);
		System.out.println(fi.eat(40, 59));
	}

}

三、抽象类

1、定义

  • 抽象类是用类做功能描述,但是没有具体的执行

  • 声明:使用abstract关键字来修饰的类,就是抽象类

  • 抽象类,可以有普通类的所有成员,还可以有抽象方法,必须使用abstract关键字修饰

  • 抽象类不能自己直接实例化自己,可以使用匿名对象写法,重写抽象类中的抽象方法
    在这里插入图片描述
    在这里插入图片描述

  • 抽象类可以被子类继承,子类可以拥有父类的所有非私有、非静态成员,必须重写父类中的所有抽象方法

  • 抽象类中的成员如代码所示

package com.xingyun.抽象类;
/**
  * 动物抽象类
 * @author langlang
 *
 * 2020年11月3日下午12:01:33
 */
public   abstract  class Animal {
	
	
	//抽象类中可以有属性
	String  name;
	static  int  age;
	final  String  color="黑色";
	static  final  String  type = "动物";
	
	
	//抽象类中可以有代码块
	{
		System.out.println("我是代码块");
	}
	
	//抽象类中可以有静态代码块
	{
		System.out.println("我是静态代码块");
	}
	
	//抽象类中可以有构造方法
	public  Animal() {
		System.out.println("我是构造方法");
	}
	
	//抽象类中可以有静态方法
	public  static  void eat(int a) {
		
	}
	
	//抽象类中可以有普通方法
	public  void  eat() {
		
	}
	
	//抽象类中可以有抽象方法
	abstract  void  run();
	

}

2、接口和抽象类的区别是什么

  1. 接口中只有静态常量、静态方法、默认方法、抽象方法;
    抽象类可以有普通类的所有以及抽象方法

  2. 接口可以被实现,一个类可以实现多个接口
    抽象类只能被继承,子类必须重写父类的所有抽象方法,要是不想重写子类也必须是抽象类
    在这里插入图片描述

  3. 抽象类可以继承抽象类,接口可以继承接口

  4. 抽象类中的抽象方法的访问类型可以是public,protected和默认类型,但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型的

  5. 接口更多的是在系统架构设计方法发挥作用,主要用于定义模块之间的通信契约(方法规定)。
    而抽象类在代码实现方面发挥作用,可以实现代码的重用。

四、枚举类(Enumeration)

  • 枚举类是用来指定固定的值的类,他是一个特殊的类,使用enum表示

  • 枚举类的语法:public enum 类名 { }
    在这里插入图片描述

  • 规定:
    枚举类中的属性,是类,也是枚举类的一个实例对象
    枚举类中的属性必须写在类中的第一行
    枚举类中的属性是私有的
    枚举类中的构造方法是私有的,不能被别人实例化

  • 使用
    将枚举类当作参数类使用,使用类名.属性名

五、内部类

内部类就是在普通类的内部创建的类,内部类分为三种:成员内部类、局部类、静态内部类

1、成员内部类(全局内部类)

  • 在外部类的内部声明的类
  • 注意:普通类可以使用final修饰,被final修饰的类为最终类,不能被其他类所继承,但他可以继承其他类
  • 语法:访问限定符 修饰符 类型 名字{ }(直接在外部类中声明)
    在这里插入图片描述
  • 如何使用:
    **第一种方法:**在外部类的方法中,直接调用内部类
    在这里插入图片描述
    **第二种方法:**在其他类中实例化外部类的内部类,来调用内部类的方法
    外部类.内部类 名字 = new 外部类(). new 内部类();
    在这里插入图片描述
    总结:全局内部类,可以使用任意限定符、修饰符、类型
    可以创建类中类,内部类的内部类

2、局部内部类

局部内部类就是在方法中创建类,
在这里插入图片描述
总结

  • 局部内部类,只有在方法中有效
  • 局部内部类的属性默认是使用final修饰的,属性是定义在方法中的局部变量
  • 对于局部内部类而言,定义在外部方法中的局部变量默认是使用final修饰的,所以在局部内部类中可以使用但是不能对其进行修改
  • 在局部内部类中,类不可以使用static修饰

3、静态内部类

全局内部类使用static修饰
在这里插入图片描述
实例化:外部类.内部类 名字 = new 外部类.内部类 ();
在这里插入图片描述

六、final关键字

  1. final是修饰符,可以用来修饰变量、方法
  2. final修饰的类,称为最终类,最终类不能被其他类所继承
  3. 被final修饰的属性,称为常量,名字要全大写。其值在运行期间是不能被改变的,在运行期间类型也不会进行自动转换。final修饰的变量必须赋予初始值(声明并赋值);
  4. final修饰的方法称为最终方法,不能被子类所继承和重写

七、Lombok插件

1、定义
Lombok项目是一个Java库,它会自动插入编辑器和构建工具中,Lombok提供了一组有用的注释,用来消除Java类中的大量样板代码。仅仅只用五个字符(@Data)就可以替换数百行代码从而产生干净、简洁且易于维护的java类。
Lombok是一个快速创建pojo对象的插件,是一个三方jar包
2、分类

  • EJB:有属性有方法,方法是实际操作的方法

  • Pojo:只有属性描述以及封装方法

  • JavaBean实体类:主要作用是用来与数据库的表进行对应的,无参数构造方法、属性必须私有、封装方法、toString方法
    3、Lombok的常用注解

  • @Setter:注解在类或者字段,注解在类时为所有字段生成setter方法,注解在字段上时只为该字段生成setter方法,生成的set方法的权限是protected,而不是默认的public

  • @Getter:使用方法同上,区别在于生成的是getter方法,

  • @Data:注解在类,生成setter/getter、equals、canEquals、hashCode、toString方法,如为final属性,则不会为该属性生成setter方法
    4、Lombok插件的使用
    1、给eclipse加上lombok功能
    将lombok.jar复制到eclipse的解压文件中,双击,如果双击失败,使用dos命令进入eclipse的解压位置,使用命令(java -jar lombok.jar)
    在这里插入图片描述
    在这里插入图片描述
    然后选择本地文件,如下图所示
    在这里插入图片描述
    然后如果出现如下图所示的页面则说明环境安装成功
    在这里插入图片描述
    如果双击eclipse无法正常启动,修改eclipse文件,如下图所示
    在这里插入图片描述
    在这里插入图片描述
    2、在项目中使用lombok插件
    3、在类中使用注解@Data、@Getter、@Setter

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值