1, 抽象类:
关键字: abstract 修饰的类
特点: 具有抽象方法的类, 不能够实例化, 可以同时有普通方法和抽象方法;
定义: 访问修饰符 abstract class 类名 {}
抽象方法: 访问修饰符 abstract class 方法名 ();
抽象方法和抽象类不能够用用 private 修饰, 有构造方法, 子类如果继承了它需要实现里面的抽象方法 (就是方法重写)
- public abstract class abstra {
- public abstract void play();
- }
作用: 主要用作父类, 在子类众多都需要继承父类中方法的时候, 不好在父类定义方法, 可以使用 abstract 修饰类和方法,
一般用于父类, 使用起来除了不能够实例化其它都差不多;
2, 接口:
关键字: interface
用关键字 implements 实现接口;
特点: 抽象类的升级, 接口里面的方法都是抽象方法, 由常量和抽象方法组成不能够实例化;
定义: 访问修饰符 interface 接口名字 {}
抽象方法和接口不能够用用 private 修饰, 无构造方法, 子类中如果实现了接口 implements 需要重写里面的方法;
- public interface inter {
- public final double PI=3.14;
- public abstract void play();//public abstract 可以省略
- }
应用范围:
a. 接口可以继承多个接口;
b. 子类可以实现多个接口;
c. 子类可以继承一个父类同时实现多个接口; 注意一般 extends 继承的父类在前, implements 在后
作用: 解耦, 降低程序之间的耦合性, 减少非他不可的不可替代性, 提高程序的扩展性,; 解决了类的单一继承性;
个人理解: 在应用的过程中, 一般来说抽象类可以解决需要接口的问题, 但是抽象类一般用作于一个类属性的父类, 如果有很多子类需要一个共同的方法, 而类型不同呢?
这个时候最好定义一个接口, 接口表示一个功能, 没有类属性的局限性 (比如说动物类定义为抽象类, 那么里面的抽象方法一般都为动物的属性方法, 具有局限性), 只有有这个功能, 都可以实现这个接口;
可以和多态一起结合使用, 把接口作为返回值类型或者参数更能够体现接口的解耦性, 接口能够更好的体现解耦;
3. 抽象类和接口的区别
a, 抽象类可以有普通方法和普通属性;
b, 抽象类有构造方法;
c, 抽象类和接口定义的关键字不同;
d, 抽象类只能单继承, 接口可以继承多个接口
注意: 抽象类不可以继承接口, 可以实现接口.
来源: http://www.bubuko.com/infodetail-2690716.html