一 在类中的关键字有区别
对于java 一个类本身就可以被继承 (除非你加了final关键字)
而对于kotlin 一个类想要被继承 必须加上 open 关键字
二 在构造函数上
相同: 类的构造函数若带有参数的话就必须 传递参数来实现他
class Student(val :sno) : Person(){}
此时Person()里面 有无参的构造函数 所以子类也要写出()来 和java 所遵守的是同一种规则
若 Person类里含有参数 那你子类必须也要传入参数来实现父类的构造函数
不同 : Kotlin 有次构造函数
class Student (val sno:String,val grade:Int,name:String,age:Int):
person(sno)
{
constructor(name :String,age :Int) :this(sno)
{
这是次构造函数 他自己调用了this 主构造函数
意思就是我们只传入两个参数也可以了
次构造函数帮你传入了给主构造函数两个参数!!!
}
}
我们可以通过默认构造值 class Student (val sno:String="我是默认的"):
person(sno)
此时我们不要求强制给他赋值 也就是几乎替代了次构造函数的功能 所以次构造函数没什么好了解的
三 在接口中
kotlin 跟java 在接口上几乎没有什么差别 下面展示kotlin的接口用法
interface Study{
fun readBook()
fun doHomework()
}
我们这里实现的kotlin 接口 函数不要求有函数体 当然你给了函数体也没错
class student(name:String ,age :Int ):Person (name ,age) ,Study
{
override fun readBook{
println("这是我实现的接口函数")
}
override fun doHomework{
println("这是我实现的接口函数")
}
} 这里我们注意 继承父类是: 然后写自己的接口 用 , 分割
一个方法 想传入这个接口类
fun doStudy(study :Study)
{
study.readBook() 这里我们要一个接口 然后谁实现了这个接口的我们都算
}
四 在类型上 (Data类,单例类)
Data类
public class CellPhone {
String brand ;
double price ;
public CellPhone(String brand ,double price)
{
this.brand=brand;
this.price=price;
}
@Override
public boolean equals(Object obj)
{
if (obj instanceof CellPhone ) {
CellPhone other = (CellPhone) obj;
return other.brand.equals(brand)&&other.price==price;
}
return false;
}
@Override
public int hashCode(){
return brand.hashCode()+(int) price;
}
@Override
public String toString(){
return "Cellphone(brand="+brand;
在kotlin中 可以这样写 return"cellphone(brand=$brand)" $符号的妙用
}
}
这段代码 主要就是 重写了 equal类(因为要对比是否是相同的) hashCode类 还有toSring类
hashcode 是重新算他的哈希值 再从hash表里面找是否相同 这里通过+(int)price的方法来进行初筛
在kotlin中 我们不需要这样麻烦 因为 这个类只是数据的操作 我们有data类来描述这些事物
data class CellPhone (val brand:String,val price :Double)
kotlin 自动帮你搞好
单例类
单例类中
public class Singleton {
private static Singleton instance;
private Singleton (){}
public synchronized static Singleton getInstance(){
if (instance==null)
{
instance=new Singleton();
}
return instance;
}
}
单例类就是说 不准被人创造实例 所以他把创造的方法私有化了 没有就自己创建
实例不是对象 是对对象的引用 每次new 必出一个新的实例 不一定有一个新的对象
对于情况 1,类 Person 有两个实例,但两个实例代表同一个对象。
对象是类的实例,实例是代表对象在该类下的副本。
Person p1 = new Person(1, "Carlos", 20);
Person p2 = new Person(1, "Carlos", 20);
单例类小片段 说明只能用getinstance来获取他那唯一的单例
class aa{
public static void main(String[] args) {
Singleton singleton=new Singleton();//报错
String a=Singleton.getInstance().toString();
}
}
在kotlin 中 直接 object Singleton {
fun aaa(){
println("函数")
} //object这个关键字直接就把他当成了单例类 此时调用方法: Singleton.aaa()
//类似静态调用
}