2026/1/9 21:29:32
网站建设
项目流程
哪个网站做美食视频网站好,乐清建网站,网站开发课设心得,广州知名网站建设哪家公司好1 类的结构 Groovy 是面向对象编程语言#xff0c;与 Java 语言类似#xff0c;都有类、对象、属性、构造函数、成员函数#xff0c;都有封装、继承、多态三大特性。1.1 执行顺序 如下#xff0c;Student 类是一个自定义的类#xff0c;里面包含了一个类的基本结构。c…1 类的结构 Groovy 是面向对象编程语言与 Java 语言类似都有类、对象、属性、构造函数、成员函数都有封装、继承、多态三大特性。1.1 执行顺序 如下Student 类是一个自定义的类里面包含了一个类的基本结构。class Student {private static String tag Studentprivate String name zhang sanprivate int age 18static {println(static code, tag$tag)}{println(non-static code, name$name)}Student() { // 无参构造函数println(create-1, name$name, age$age)}Student(String name, int age) { // 有参构造函数println(create-2, name$name, age$age)this.name namethis.age age}void study() { // 成员函数println(study...)}}def stu1 new Student()stu1.study()println(-----------------------------------------)def stu2 new Student(li si, 23) 运行程序后打印如下。static code, tagStudentnon-static code, namezhang sancreate-1, namezhang san, age18study...-----------------------------------------non-static code, nameli sicreate-2, nameli si, age23 类的初始化顺序如下 父类静态代码块 → 子类静态代码块 → 父类属性初始化 → 父类非静态代码块 → 父类构造函数 → 子类属性初始化 → 子类非静态代码块 → 子类构造函数。1.2 Setter 和 Getter 方法class User {String nameUser(String name) {this.name name}void setName(String name) {this.name xxx_$name}String getName() {return yyy_$name}}User user new User(zhang san)println(user.name) // 打印: zhang sanprintln(user.name) // 打印: yyy_zhang sanuser.name li siprintln(user.name) // 打印: li siprintln(user.name) // 打印: yyy_li siuser.name wang wuprintln(user.name) // 打印: xxx_wang wuprintln(user.name) // 打印: yyy_xxx_wang wu 说明user.name 调用的是 name 属性的 Setter / Getter 方法user.name 是直接修改 / 访问 name 属性。2 封装 封装是指将相关联的属性和函数封装到同一个类中并且可以控制这些属性和函数的访问权限它通过隐藏内部细节和提供清晰的接口提高了代码的安全性、可维护性和可理解性它是面向对象编程中的重要概念之一。 在 Groovy 中有四种访问权限修饰符private、default、protected 和 public。这些修饰符控制了代码中类、函数、属性等成员的可见性和访问权限。private只能在类内部访问。default如果没有指定访问修饰符默认为包级私有只能在同一个包内访问。protected只能在类内部、子类以及同一包内访问。public可以在任何地方访问。3 继承 继承是指一个类称为子类或派生类基于另一个类称为父类或基类创建新类子类继承了父类的属性和函数并且可以在此基础上进行扩展或修改它是面向对象编程中的重要概念之一。在 Groovy 中继承使用 extends 来表示Object 类是所有类的基类。class People {String nameint age{println(People non-static code, name$name, age$age) // 1}People(String name, int age) {println(People constructor-1, name$name, age$age) // 2this.name namethis.age ageprintln(People constructor-2, name$name, age$age) // 3}}class Student extends People {int id{println(Student non-static code, name$name, age$age, id$id) // 4}Student(String name, int age, int id) {super(name, age)println(Student constructor-1, name$name, age$age, id$id) // 5this.id idprintln(Student constructor-2, name$name, age$age, id$id) // 6}}def stu new Student(zhang san, 23, 1001) 说明子类必须直接或间接调用一下父类的一个构造函数否则编译报错如果用户没有显式调用父类构造函数编译后会自动调用父类的无参构造函数如果父类没有无参构造函数就会编译报错。 运行程序后打印如下。People non-static code, namezhang san, age23People constructor-1, namezhang san, age23People constructor-2, namezhang san, age23Student non-static code, namezhang san, age23, id1001Student constructor-1, namezhang san, age23, id1001Student constructor-2, namezhang san, age23, id10014 多态 多态是指同一个函数可以在不同的对象上表现出不同的行为这种行为通常通过继承和接口来实现。多态使得代码更加灵活和可扩展是面向对象编程中的重要概念之一。4.1 覆盖函数class People {String namePeople(String name) {this.name name}void say() {println(People say)}}class Student extends People {int idStudent(String name, int id) {super(name)this.id id}Overridevoid say() {println(Student say)}}People peo new Student(li si, 1002)peo.say() // 打印: Student say4.2 类型智能转换class People {}class Student extends People {void study() {println(study...)}}People peo new Student()peo.study() // 打印: study... 说明Java 没有智能转换特性需要进行强制类型转换。Groovy是一种动态类型语言它在运行时进行类型检查和方法解析。5 抽象类abstract class 使用 abstract 修饰的类称为抽象类抽象类中可以有抽象函数这些函数被添加了 abstract 修饰符父类不能实现子类必须重写实现子类如果也是抽象类除外。抽象类不能被实例化只能实例化其具化子类抽象类中允许有具化的函数。abstract class People {String name xiao minabstract void say()}class Student extends People {Overridevoid say() {println($name: Hello)}}//def peo new People() // 编译报错, 抽象类不能被实例化def stu new Student()stu.say() // 打印: xiao min: Hello6 接口interface 接口与抽象类有些类似接口里只有常量和抽象函数函数允许有默认实现Groovy 中允许一个类实现多个接口但最多只能继承一个类。interface A {String x xxxdefault void aFun() {println(A, x$x)}}interface B {void bFun()}class C implements A, B {Overridevoid bFun() {println(bFun)}}def c new C()c.aFun() // 打印: A, xxxxc.bFun() // 打印: bFun 运行程序后打印如下。A, xxxxbFun7 枚举类型enumenum Color {RED(red) {Overridevoid test() {println(test, $tag)}},GREEN(green) {Overridevoid test() {println(test, $tag)}},BLUE(blue) {Overridevoid test() {println(test, $tag)}}final String tagColor(String tag) {this.tag tag}void printColor() {println(color$tag)}abstract void test()}