Android 抽象类、抽象方法、接口以及Kotlin中的抽象类、抽象方法、接口

一、Android 抽象类、抽象方法

抽象方法:类的成员方法,只有声明,没有实现,把实现交给子类。
抽象类:含有抽象方法的类。
1.有抽象方法的类一定是抽象类,但抽象类里可以没有抽象方法(当然也可以抽象方法+一般方法);
2.抽象类里可以构造方法,但当其他类继承(extends)时,子类必须用super() 继承父类的构造方法;
3.抽象类一旦被继承,抽象方法在子类必须全部实现(没有abstract修饰),但是当子类也为抽象类时,父类的抽象方法可以不用实现或者部分实现;
4.抽象类不能被实例(new 对象),只能实例化实现了抽象方法的子类。

注意:
包含抽象方法的类称为抽象类,但并不意味着抽象类中只能有抽象方法,它和普通类一样,同样可以拥有成员变量和普通的成员方法。抽象类和普通类的主要有三点区别。

1.抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public。
2.抽象类不能用来创建对象;
3.如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。
在其他方面,抽象类和普通的类并没有区别。

二、Android 中的接口

1.接口类的所有方法都是抽象方法(和修饰词abstract没有一点关系),也就是完全抽象;
2.接口内不能构造方法;
3.接口一旦被实现(implements),接口内的方法必须全部实现(没有abstract修饰),但是当实现类为抽象类时,接口内的方法可以不实现或者部分实现;
4.接口不能被实例(new 对象),只能实例化实现接口的类。

注意:接口中可以含有 变量和方法。但是要注意,接口中的变量会被隐式地指定为public static final变量(并且只能是public static final变量,用private修饰会报编译错误),而方法会被隐式地指定为public abstract方法且只能是public abstract方法(用其他关键字,比如private、protected、static、 final等修饰会报编译错误),
2.接口中所有的方法不能有具体的实现,从这里可以隐约看出接口和抽象类的区别,接口是一种极度抽象的类型,它比抽象类更加“抽象”,
3.一般情况下不在接口中定义变量。

三、Kotlin中的抽象类、抽象方法

抽象方法:使用abstract修饰符定义,只有方法签名,没有方法实现的方法。
抽象类:包含抽象成员(包属性+方法)的类。
1.抽象类必须使用abstract修饰符来修饰,抽象类成员也必须使用abstract 修饰符来修饰,抽象方法不能有方法体。
2.抽象类不能被实例化,无法调用抽象类的构造器创建抽象类的实例。即使抽象类中不包含任何抽象成员,这个抽象类也不能创建实例。
3.抽象类可以包含属性、方法、构造器、初始化块、嵌套类5种成员。
4.抽象类中可以没有抽象成员。含有抽象成员的类只能被定义成抽象类。

注意:
1.abstract不能用于修饰局部变量,Kotlin中没有抽象变量的说法。
2.abstract也不能用于修饰构造器,没有抽象构造器,抽象类中定义的构造器只能是普通构造器。
3.private和abstract不能同时修饰方法。
4.有abstract修饰的成员,无须使用open修饰,当使用abstract修饰类时,表明这个类需要被继承;当使用abstract修饰方法、属性时,表明这个方法、属性必须由子类提供实现。

四、Kotlin中的接口

1.Kotlin 接口与 Java 8 类似,使用 interface 关键字定义接口,允许方法有默认实现
在这里插入图片描述

2.接口中的属性只能是抽象的,不允许初始化值,接口不会保存属性值,实现接口时,必须重写属性:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/yanhuomatou2015/article/details/108419921