Gradle系列——Groovy面向对象(基于Groovy文档4.0.4)day2-2

181 篇文章 3 订阅
8 篇文章 0 订阅
这篇博客深入探讨了Groovy的面向对象特性,包括原始类型(如byte、int、float等)、包装类、继承(单一继承)、泛型的使用,以及Class类和内部类的声明。此外,还详细介绍了Groovy中的抽象类、接口实现和闭包(类似lambda表达式)的概念,展示了如何在Groovy中调用闭包。
摘要由CSDN通过智能技术生成

Groovy面向对象

类型

原始类型

整数类型
  1. byte:8位
  2. short:16位
  3. int:32位
  4. long:64位
浮点型
  1. float:32位
  2. double:64位
布尔型
  1. true
  2. false
char

char :16位

包装类型

  1. Boolean
  2. Character
  3. Short
  4. Long
  5. Integer
  6. Float
  7. Double

当原始类型调用.toString()或者 .equals(other)可以进行自动包装和展开

继承

使用extends关键字,Groovy同样也不支持多重继承,可以继承类或者接口(类继承类,接口继承接口)

class Test3 extends Test2{
	...
}
//虽然不报错,但在运行是就会有报错
class Test3 extends Test2,Test4{} 

泛型

Groovy 在泛型方面与 Java 具有相同的概念。 定义类和方法时,可以使用类型参数并创建 泛型类、接口、方法或构造函数。

泛型类和方法的使用,无论它们是否在 Java 中定义 或 Groovy,可能涉及提供类型参数。

我们可以声明一个 “字符串列表” 如下所示:

List<String> roles = ['Trinity', 'Morpheus']

Class类

使用class关键字声明
类和类成员可以具有与 Java 中相同的修饰符(public、protected、private、static 等)

Groovy 类与其 Java 对应类之间的主要区别是:

  1. 没有可见性修饰符的类或方法自动成为公共的(可以使用特殊的注释来实现包私有的可见性)。
  2. 没有可见性修饰符的字段会自动转换为属性,从而减少冗长的代码, 因为不需要显式的 getter 和 setter 方法。 更多关于这方面的内容将在 字段和属性部分 。
  3. 类不需要与其源文件定义具有相同的基本名称,但在大多数情况下强烈建议使用(另请参阅关于脚本的下一点)。
  4. 一个源文件可能包含一个或多个类(但如果文件包含任何不在类中的代码,则将其视为脚本)。 脚本只是一些类 特殊约定,并且将与其源文件同名(因此不要在与脚本源文件同名的脚本中包含类定义)。

以下代码提供了一个示例类。

class Test1 {
    def username;
    def password;
    
    def getAll(){
        username = "wangwu"
        password = "123321"
        username + password
    }
}

内部类

package cn.test

class Test1 {
    def username;
    def password;

    def showInner(){
        def inner = new Inner()
        inner.show()
    }

    class Inner{
        def show(){
            println("inner ...")
        }
    }
}

匿名内部类



class Outer3 {
    private String privateStr = 'some string'

    def startThread() {
        new Thread(new Runnable() {      
            void run() {
                println "${privateStr}."
            }
        }).start()                       
    }
}


静态内部类

使用static关键字进行声明

class Test7 {
    static class InnerTest7{
        
    }
}

抽象类

使用abstract关键字设置位抽象类,方法也必须用abstract关键字声明,否则认为是带有方法体的方法

abstract class Test2 {
   abstract def show();
    
    def show2(){
        println("show2")
    }
}

接口

使用interface关键字声明

interface Test5 {
    def showTest5()
}

实现

使用implements关键字进行实现

class Test6 implements Test5{
  
}

闭包(lambda表达式)

闭包是一个开放的、匿名的代码块,它可以接受参数、也可以有返回值
闭包可以引用周围作用域中声明的变量(lambda表达式)
虽然我在这里这样将闭包称为lambda但实际上闭包不等于lambda,至于区别大家可以去看一下相关文章

语法

闭包:
{...}

def bi(a){
    println(a)
}
lambda
()->{...}

如:

def lam = ()->{
    println("this is lam")
}

调用

  1. 直接使用名字调用
  2. 使用call方法调用
lam()

lam.call()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值