zoukankan      html  css  js  c++  java
  • 一手遮天 Android

    项目地址 https://github.com/webabcd/AndroidDemo
    作者 webabcd

    一手遮天 Android - kotlin: 类相关 1(基础)

    示例如下:

    /kotlin/Demo7.kt

    /**
     * 本例用于演示类的定义和使用(实例化对象,调用属性,调用方法,下标运算符 [] 的使用,静态属性,静态方法,嵌套类,内部类,局部类,匿名内部类)
     */
    
    package com.webabcd.androiddemo.kotlin
    
    import androidx.appcompat.app.AppCompatActivity
    import android.os.Bundle
    import com.webabcd.androiddemo.R
    import kotlinx.android.synthetic.main.activity_kotlin_helloworld.*
    
    class Demo7 : AppCompatActivity() {
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_kotlin_demo7)
    
            sample1() // 实例化对象,调用属性,调用方法
            sample2() // 静态属性,静态方法
            sample3() // 嵌套类,内部类,局部类
            sample4() // 匿名内部类
        }
    
        fun sample1() {
            // 实例化对象(不需要 new)
            var a: Demo7_Class = Demo7_Class("webabcd", "china")
            var b: Demo7_Class = Demo7_Class("webabcd", 40, "china")
    
            // 调用方法
            appendMessage(a.getInfo())
            appendMessage(b.getInfo())
    
            // 调用属性
            b.country = "中国"
            b.weight = 33
            appendMessage(b.getInfo())
    
            // 用于演示属性的自定义 getter 和 setter
            b.height = 2;
            appendMessage(b.getInfo())
            b.height = 20;
            appendMessage(b.getInfo())
    
            // 下标运算符 [] 的使用
            a[0] = "123"
            appendMessage(a[0])
        }
    
        fun sample2() {
            // 静态属性(通过伴生对象实现)
            appendMessage(Demo7_Class.name)
            // 静态方法(通过伴生对象实现)
            appendMessage(Demo7_Class.hello("webabcd"))
    
            // 静态属性(通过 object 实现)
            appendMessage(MyStatic.name)
            // 静态方法(通过 object 实现)
            appendMessage(MyStatic.hello("webabcd"))
        }
    
        fun sample3() {
            // 嵌套类的使用
            var a: NestedClass = NestedClass("wanglei")
            appendMessage(a.hello())
    
            // 内部类的使用
            var b: InnerClass = InnerClass("wanglei")
            appendMessage(b.hello())
    
            // 定义一个局部类(可以访问外部类)
            class PartClass(name: String) {
                var name = ""
                init {
                    this.name = name
                }
                fun hello(): String {
    
                    return "hello: $name"
                }
            }
    
            // 局部类的使用
            var c: PartClass = PartClass("wanglei")
            appendMessage(c.hello())
        }
    
        fun sample4() {
            var a: MyView = MyView()
            // 这里的 object: OnClickListener 就是匿名内部类
            a.setOnClickListener(object: OnClickListener {
                override fun onClick(message: String) {
                    appendMessage(message)
                }
            })
            a.testListener()
        }
        // 用于演示匿名内部类
        class MyView {
            private lateinit var listener : OnClickListener
            fun setOnClickListener(listener: OnClickListener) {
                this.listener = listener
            }
            fun testListener(){
                if (this.listener != null)
                    listener.onClick("xxx")
            }
        }
        interface OnClickListener {
            fun onClick(message: String)
        }
    
        // 定义一个 object 用于实现静态属性和静态方法
        object MyStatic {
            var name = "wanglei"
            fun hello(name: String): String {
                return "hello: $name"
            }
        }
    
        // 定义一个嵌套类(不可以访问外部类)
        class NestedClass(name: String) {
            var name = ""
            init {
                this.name = name
            }
            fun hello(): String {
                return "hello: $name"
            }
        }
    
        // 定义一个内部类(不可以访问外部类)
        inner class InnerClass(name: String) {
            var name = ""
            init {
                this.name = name
            }
            fun hello(): String {
                return "hello: $name"
            }
        }
    
    
    
        fun appendMessage(message: String) {
            textView1.append(message)
            textView1.append("
    ")
        }
    }
    

    kotlinDemo7_Class.kt

    /**
     * 本例用于演示类的定义(类,属性,方法,属性的 getter 和 setter,下标,静态属性,静态方法)
     *
     * 别管是类,还是属性,还是方法其默认都是 public 的,除了 public 外还有 private, protected, internal
     * var, val, const val, lateinit 也适用于属性,其概念参见 Demo1.kt 中的说明
     * kotlin 中的类名和包名可以与物理路径不一致(java 是要求一致的)
     */
    
    package com.webabcd.androiddemo.kotlin
    
    // 这里的 constructor 用于定义类的主构造函数,主构造函数只能有一个
    // 对于 public 的类来说,其主构造函数可以省略 constructor
    // 主构造函数的参数定义中,可以加上 var 或 val,其会自动声明同名的属性
    class Demo7_Class constructor(name: String, var country: String) {
    
        // 声明属性
        var name: String = ""
        var age: Int = -1
    
        // 调用主构造函数时会执行这里
        init {
            this.name = name
        }
    
        // 非主构造函数,这个可以有多个
        // 后面跟 : this() 用于调用主构造函数
        constructor(name: String, age: Int, country: String) : this(name, country) {
            this.age = age
        }
    
        // 方法
        fun getInfo(): String {
            return "name:$name, age:$age, country:$country, weight:$weight, height:$height"
        }
    
        // 属性
        // 下面的代码就是 getter 和 setter 的默认实现,可以不写
        // 这里的 field 是由系统管理的,相当于 _weight
        var weight: Int = -1
            get() = field
            set(value) {
                field = value
            }
    
        // 属性,自定义 getter 和 setter
        var height: Int = -1
            get() = if (field < 10) 10 else field
            set(value) {
                field = value * 2
            }
    
        // 下标运算符(subscript operator)[]
        // 在 kotlin 中通过如下的 operator fun get 和 operator fun set 的方式实现 []
        var dict: MutableMap<Int, String> = mutableMapOf()
        operator fun get(index: Int): String {
            return dict[index] ?: ""
        }
        operator fun set(index: Int, value: String) {
            dict[index] = value
        }
    
    
        // 伴生对象
        // 用于定义静态属性和静态方法
        companion object {
            var name = "wanglei"
            fun hello(name: String): String {
                return "hello: $name"
            }
        }
    }
    
    
    
    

    /layout/activity_kotlin_demo7.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    
        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    
    </LinearLayout>
    
    

    项目地址 https://github.com/webabcd/AndroidDemo
    作者 webabcd

  • 相关阅读:
    C# HttpWebRequest 发送SOAP XML
    浅谈HTTP中Get与Post的区别(转)
    WebService的helloworld,服务器端与客户端的Demo(转)----自己建立的Web Project , 而不是Web Service Project,利用WSDD 自己发布
    C#操作XML(转)
    要学习的知识
    Web service是什么?
    暖式切边线和冷式切变线
    python 形状区分市控国控,颜色表示aqi等级
    Linux常用指令---grep(搜索过滤)
    Axis通过wsdd部署Web Service
  • 原文地址:https://www.cnblogs.com/webabcd/p/android_kotlin_Demo7.html
Copyright © 2011-2022 走看看