抽象类:
使用abstract 修饰的类就是抽象类。抽象类的本质就是一个类。
1,抽象类不能被实例化,每每用来作父类,定义子类中共有的方法和属性。子类继承抽象类之后,覆盖实现抽象类里的抽象方法,而后使用其子类的实例。
子类必须覆盖父类(是个抽象类)里面全部的抽象方法,不然编译报错。
2,抽象类可使用类名直接调用抽象类里面的静态成员
3,抽象类每每做为父类来使用,而子类的构造方法老是调用父类的构造方法,因此
抽象类必需要有构造方法。若是没有为抽象类显式声明构造方法,抽象类也存在默认的无参构造器。
抽象方法:
只给出方法定义而不具体实现的方法.(就是没有方法体的方法,使用abstract修饰)
抽象方法是没有方法体的,在代码表达上就是没有 “{}”。 有花括号就代表有方法体。
抽象类和抽象方法的关系
:
抽象类不必定包含抽象方法
有抽象方法的类必定是个抽象类。
接口interface:
接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。
接口的本质是个抽象类。
接口里面只能声明静态常量和抽象方法,除此以外,接口里面不能有其余的元素。
接口里的常量,默认是(也只能是) public static final 的,这些修饰符可省略;可使用接口名调用常量。
接口里的方法都是抽象的,默认是(也只能是)public abstract的,这些修饰符可省略;
类和接口的关系:
1,类和类之间能够互相继承,接口和接口之间也能够相互继承,用关键字extends表示,区别在于接口能够同时继承多个接口,可是一个类只能同时继承一个类。
2,类和接口之间,只能是类来实现接口,一对多的关系,一个类能够同时实现多个接口,接口间用逗号分隔开,使用关键字implement
public interface A{
public void a{ };
}
public interface B{
public void b{ };
}
public interface C extends A,B{
public void c{ };
}
以上例子接口C同时继承了接口A和B,拥有了A和B的方法,因此C接口里面有3个抽象方法:a,b,c
抽象类和接口的关系:
接口里面不能定义变量,接口里的方法必须都是抽象的
抽象类里能够有变量,抽象类里的方法能够是抽象的,也能够不是抽象的。
扩展:
类继承父类和类实现接口的区别:
二者本质是同样的,都是把父类或者接口当作模板,在这个模板上进行扩展或者重写。
可是类继承父类只能是单继承,也就是说一个子类最多只能有一个父类。
而类实现接口能够多实现,就是一个子类能够同时实现多个接口,并覆盖接口里面全部的抽象方法。