面向对象中的JDK8 接口和 Lambda

1.Final 在匿名内部类 jdk7 和 jdk8 的区别

Jdk8 开始匿名内部类在使用外部局部变量时,局部变量可以不加 final,但是也不能修改局部变量
JDK8中,对final在内部类的用法进行了修改实例如下 :在JDK8中而在JDK7中必须加final进行修饰

//JDK8中
public class HelloWorld {
	void test(){
    }
    public static void main(String []args) {
         int age  = 19;//可以不加final修饰
		HelloWorld h1 = new HelloWorld(){
		    void test(){
			    System.out.println(age);
			}
		};
		h1.test();
		/*
		 * 匿名内部类使用外部的局部变量,
		 * 可以不加final修饰,但是不能修改变量
		 */
		//age = 20;
    }
}

2.JDK8接口

  • 官方解释:Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。

  • 我的解释:接口可以理解为一种特殊的类,里面全部是由全局常量和公共的抽象方法所组成。接口是解决Java无法使用多继承的一种手段,但是接口在实际中更多的作用是制定标准的。或者我们可以直接把接口理解为100%的抽象类,既接口中的方法必须全部是抽象方法。(JDK1.8之前可以这样理解),以及接口只能被实现,可以多实现,一个类可以实现多个接口。

  • (一)基本接口
    1.极端抽象类(原来的理解:接口中全部都是抽象方法)
    (1)接口中的方法全是抽象方法
    (2)接口中的成员变量全是常量
    (3)接口中的所有成员权限都是 public
    (4)修饰符 interface,不是 class
    (5)接口实例

	public interface interFace {
	
	}

JDK8特有的语法

JDK8中新接口处新了加两种方法JDK8默认方法以及JDK8静态方法

  • JDK8默认方法:以default关键字对方法进行修饰。

  • JDK8静态方法:以static关键字对方法进行修饰。

  • 以上两种方法都是JDK8中新加入的在JDK8以前是没有这两种方法的

public interface InterfaceDemo {

    int STATE_SUCCESS = 200;
    
    void test() ;
    
    //-------------jdk8当中特有的语法-------------------//
    
    default void show() {//被实现类对象继承调用
        System.out.println("jdk8接口-默认方法");
    }
    
    static void print() {//用接口名称进行调用
        System.out.println("jdk8接口-静态方法");
    }
    
}

函数式接口

/**<p>Title:interFace</p>
 * <p>Description: 接口中的函数式接口</p>
 * @author shishuai
 * @datetime 2019-01-28 23:12
 * @version 	1.0	//当前版本
 * @since	1.0		//起始版本
 */
@FunctionalInterface
public interface interFace {
		void test();
}

接口中可以写哪些内容

1.常量
2.抽象方法
3.默认方法
4.静态方法

  • 接口实现类
    1.实现某个接口的类,称为接口实现类
    2.通常接口实现类会以 Impl 为结尾
interface Foo{}//接口
class FooImpl implementes Foo{}//类实现接口

3.接口实现类需要实现接口中所有抽象方法
4.接口实现类和接口之间是一个实现关系,属于继承,实现类和接口之间是多态关系

Foo f1 = new FooImpl();
f1 和 new FooImpl()// 是一个多态的关系
类与类,类与抽象类,类与接口,抽象类与接口,接口与接口之间的关系

1.类与类之间是继承关系,只能单继承,用 extends 关键字进行描述
2.类与抽象类之间是继承关系,只能单继承,用 extends 关键字进行描述
3.类与接口之间是实现关系,类可以同时实现多个接口,用 implements 关键字进行描述
4.抽象类与接口之间是实现关系,用 implements 关键字进行描述
5.接口与接口之间是继承关系,支持接口的多继承,用 extends 关键字进行描述

三、Lambda 表达式

作用:最直观的作用就是使得代码变得异常简洁。

@FunctionalInterface

public interface Foo {
    
    /**
     * 传入一个label标签,传入一个对应的值,显示一组结果
     * @param label
     * @param value
     */
    void show(String label,String value);
    
}
public class Lambda {
	void show(String label,String value);
//-------匿名内部类
        Foo f1 = new Foo() {
            @Override    
            public void show(String label, String value) {
                System.out.println("<<"+label+"="+value+">>");
            }
        };//正常的的写法而实际上起到作用的只有  System.out.println("<<"+label+"="+value+">>");这一句代码


//--------Lambda表达式
 	public static void main(String[] args) {
 	 Foo f2 = (label,value) ->  System.out.println("<<"+label+"="+value+">>");
 	 //接受一个 label,value 对象,并在控制台打印,不返回任何值(看起来像是返回void)  
 	 //其中的()- >被称为lambda表达式
        f2.show("年龄", "20");
       }//使用Lambda表达式的写法

由上述两个得知Lambda表达式为我们写代码提供了一个更加快捷和方便的方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值