1 匿名類
1)無(wú)繼承
fun main() {
var obj = object {
var name: String = "zhang"
override fun toString(): String {
return name
}
}
println(obj) // zhang
}
2)有繼承
fun main() {
var obj = object: People {
var name: String = "zhang"
override fun play() {
println("play, $name")
}
}
obj.play() // play, zhang
}
interface People {
fun play()
}
2 單例
2.1 案例一
1)object 單例
fun main() {
var singleton = Singleton
println(singleton)
}
object Singleton {
var name = "zhang"
override fun toString(): String {
return return name
}
}
2)對(duì)應(yīng)的 java 類
Singleton.java
public final class Singleton {
private static String name;
public static final Singleton INSTANCE;
static {
INSTANCE = new Singleton();
name = "zhang";
}
private Singleton() {
}
public final String getName() {
return name;
}
public final void setName(String var1) {
name = var1;
}
public String toString() {
return name;
}
}
java 中調(diào)用如下傍药。
Singleton singleton = Singleton.INSTANCE;
System.out.println(singleton);
2.2 案例二
1)object 單例
fun main() {
var stu = Student.Tools.create("zhang")
println(stu) // zhang
println(Student.Tools.age) // 15
}
class Student(var name: String) {
object Tools {
var age: Int = 15
fun create(name: String): Student {
return Student(name)
}
}
override fun toString(): String {
return name
}
}
2)對(duì)應(yīng)的 java 類
Student.java
public final class Student {
private String name;
public Student(String name) {
this.name = name;
}
public final String getName() {
return this.name;
}
public final void setName(String var1) {
this.name = var1;
}
public String toString() {
return this.name;
}
public static final class Tools {
private static int age;
public static final Tools INSTANCE;
static {
INSTANCE = new Tools();
age = 15;
}
private Tools() {
}
public final Student create(String name) {
return new Student(name);
}
public final int getAge() {
return age;
}
public final void setAge(int var1) {
age = var1;
}
}
}
java 中調(diào)用如下。
Student stu = Student.Tools.INSTANCE.create("zhang");
System.out.println(stu);
System.out.println(Student.Tools.INSTANCE.getAge());
3 伴生類
3.1 伴生類應(yīng)用
1)應(yīng)用
fun main() {
var stu = Student.create("zhang")
println(stu) // zhang
println(Student.age) // 15
}
class Student(var name: String) {
companion object Tools {
var age: Int = 15
fun create(name: String): Student {
return Student(name)
}
}
override fun toString(): String {
return name
}
}
2)反編譯后 java 類
Student.java
public final class Student {
private String name;
private static int age = 15;
public static final Tools Tools = new Tools(();
public Student(String name) {
this.name = name;
}
public final String getName() {
return this.name;
}
public final void setName(String var1) {
this.name = var1;
}
public String toString() {
return this.name;
}
public static final class Tools {
private Tools() {
}
public final Student create(String name) {
return new Student(name);
}
public final int getAge() {
return Student.age;
}
public final void setAge(int var1) {
Student.age = var1;
}
}
}
java 中調(diào)用如下。
Student stu = Student.Tools.create("zhang");
System.out.println(stu);
System.out.println(Student.Tools.getAge());
3.2 @JvmStatic 應(yīng)用
為方便 Java 中也可以直接調(diào)用 Student.create()嗡害,可以給伴生類中的函數(shù)添加 @JvmStatic 注解。
1)應(yīng)用
class Student(var name: String) {
companion object Tools {
var age: Int = 15
@JvmStatic
fun create(name: String): Student {
return Student(name)
}
}
override fun toString(): String {
return name
}
}
java 中調(diào)用如下畦攘。
Student stu = Student.create("zhang");
System.out.println(stu);
System.out.println(Student.Tools.getAge());
2)反編譯后 java 類
public final class Student {
private String name;
private static int age = 15;
public static final Tools Tools = new Tools();
public Student(String name) {
this.name = name;
}
public static final Student create(String name) {
return Tools.create(name);
}
public final String getName() {
return this.name;
}
public final void setName(String var1) {
this.name = var1;
}
public String toString() {
return this.name;
}
public static final class Tools {
private Tools() {
}
public final Student create(String name) {
return new Student(name);
}
public final int getAge() {
return Student.age;
}
public final void setAge(int var1) {
Student.age = var1;
}
}
}
說(shuō)明:對(duì)比有無(wú) @JvmStatic 注解反編譯后的代碼霸妹,發(fā)現(xiàn)有 @JvmStatic 注解時(shí),反編譯的代碼里 Student 類中多了靜態(tài)的 create 方法知押,因此在 Java 中可以直接調(diào)用 Student.create()叹螟。
聲明:本文轉(zhuǎn)自【Kotlin】匿名類和伴生類。