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.接口中的属性只能是抽象的,不允许初始化值,接口不会保存属性值,实现接口时,必须重写属性:


今天的分享结束了,再见~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。