abstract (抽象)
用abstract关键字来修饰一个类时,这个类叫做抽象类;
用abstract来修饰一个方法时,该方法叫做抽象方法。
抽象方法:只有方法的声明,没有方法的实现。以分号结束:abstract int abstractMethod( int a );
含有抽象方法的类必须被声明为抽象类。
抽象类不能被实例化。抽象类是用来被继承的,抽象类的子类必须重写父类的抽象方法,并提供方法体。若没有重写全部的抽象方法,仍为抽象类。
不能用abstract修饰属性、私有方法、构造器、静态方法、final的方法。
事例:
abstract class A{ abstract void m1( ); public void m2( ){ System.out.println("A类中定义的m2方法"); } } class B extends A{ void m1( ){ System.out.println("B类中定义的m1方法"); } } public class Test{ public static void main( String args[ ] ){ A a = new B( ); a.m1( ); a.m2( ); }
interface (接口)
接口(interface)是抽象方法和常量值的定义的集合。
从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。
实现接口类:
class SubClass implements InterfaceA{ }
接口的特点:
用interface来定义。
接口中的所有成员变量都默认是由public static final修饰的。
接口中的所有方法都默认是由public abstract修饰的。
接口没有构造器。
接口采用多继承机制。
接口定义举例:
应用举例1:
public interface Runner { public void start(); public void run(); public void stop(); } public class Person implements Runner { public void start() { // 准备工作:弯腰、蹬腿、咬牙、瞪眼 // 开跑 } public void run() { // 摆动手臂 // 维持直线方向 } public void stop() { // 减速直至停止、喝水。 } }
应用举例2:
// 一个类可以实现多个无关的接口 interface Runner { public void run();} interface Swimmer {public double swim();} class Creator{public int eat(){…}} class Man extends Creator implements Runner ,Swimmer{ public void run() {……} public double swim() {……} public int eat() {……} } //与继承关系类似,接口与实现类之间存在多态性 public class Test{ public static void main(String args[]){ Test t = new Test(); Man m = new Man(); t.m1(m); t.m2(m); t.m3(m); } public String m1(Runner f) { f.run(); } public void m2(Swimmer s) {s.swim();} public void m3(Creator a) {a.eat();} }