Gradle系列五之面向对象

新建一个Groovy Class,这个类叫做Person:

class Person {
    String name
    Integer age
    def increaceAge(int year) {
        return age + year
    }
}

Groovy类、方法、变量默认都是public的
然后新建一个Gradle script,如ObjectStudy去使用上面这个类:

def person = new Person(name: "zhangpan", age: 25)
//无论是直接用.去调用还是调用get/set最终都是去调用get/set
println "the name is ${person.name}, the age is ${person.age}"
println person.increaceAge(10)

打印输出如下:

the name is zhangpan, the age is 25
35
接口

和Java的接口完全一样

Groovy运行时元编程
元编程示意图

我们在ObjectStudy.groovy中调用Person类没有的方法,如:

person.cry()

这时候运行就会报错:MissingMethodException
此时我们在Person.groovy中重写invokeMethod方法:

Object invokeMethod(String s, Object o) {
        println "the method name is invokeMethod  ${s}"
    }

再去运行,发现没有报错了,而且打印输出如下:

the method name is invokeMethod cry

我们再添加methodMissing方法:

def methodMissing(String name, Object args) {
        println  "the method name is methodMissing ${name}"
    }

运行,打印输出如下:

the method name is methodMissing cry

为类动态的添加方法:

person.metaClass.cry = {
    println "the metaClass cry generated"
}

这时候再运行,打印输出为:

the metaClass cry generated

也能为类动态的添加属性:

person.metaClass.sex = 'male'
println person.sex

打印输出为:

male

喜欢本篇博客的简友们,就请来一波点赞,您的每一次关注,将成为我前进的动力,谢谢!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容