java抽象类和接口
1 抽象类
在解决实际问题时,一般将父类作为抽象类,子类继承父类,并且实例化对象
在一个类中,只要有有一个方法是抽象的,类就是抽象的
抽象类被继承后需要实现所有的抽象方法,抽象类的关键词是abstract
2 接口
接口是抽象类的延伸,接口使用interface进行定义
3 实现接口
一个类继承一个父类的同时再实现一个接口
举一个实现例子
package nb;
interface Ren{ //绘制人的接口
public void sing();
}
class Teacher { //制作一个人下的teacher类
public void ZuoShi(){
System.out.println("Teacher创建的方法");
}
}
class Tchild extends Teacher implements Ren{
@Override
public void sing() {
System.out.println("老师的孩子使用人类的唱歌方法接口");
}
}
public class Jk {
public static void main(String[] args) {
Tchild tchild = new Tchild();
tchild.sing();
tchild.ZuoShi();
}
}
接口里的方法和类里的方法被同时实现了
4 接口继承接口
如果是接口制成接口,应该使用extend关键字,而不是implements关键字
写一个接口继承接口的案例
package nb;
interface Fatherin{
void fatherMe();
}
interface Childin extends Fatherin{
void childMe();
}
class InterTrue implements Childin{ //同时实现子接口和父接口
@Override
public void fatherMe() {
System.out.println("实现父接口的方法");
}
@Override
public void childMe() {
System.out.println("实现子接口的方法");
}
}
public class Kak {
public static void main(String[] args) {
InterTrue interTrue = new InterTrue();
interTrue.childMe();
interTrue.fatherMe();
}
}
如果类实现了子接口,在类中就要同时重写父接口和子接口的方法,不然会报错
5 接口的多重继承
与类不能多重继承不同,接口可以实现多重继承的语法,子接口可以同时继承多个父接口
写一个案例
package nb;
interface A{
void a();
}
interface B{
void b();
}
interface C{
void c();
}
interface D extends A,B,C{
}
class ConeTrue implements D{
@Override
public void a() {
System.out.println("A接口中的a方法");
}
@Override
public void b() {
System.out.println("B接口中的b方法");
}
@Override
public void c() {
System.out.println("C接口中的c方法");
}
}
public class DuoChong {
public static void main(String[] args) {
ConeTrue coneTrue = new ConeTrue();
coneTrue.a();
coneTrue.b();
coneTrue.c();
}
}
6 接口的默认方法
java8新增了两个默认方法default方法和static方法并且允许这两个方法有方法体
default方法可以被子接口继承,也可以被他的实现类调用,default方法被继承时,可以被子接口重写方法
在一个java类实现了多个接口,这些接口在没有继承关系并且接口中包含相同的default方法,接口实现类会报错
接口实现类必须通过特殊语法,指定该实现类要实现哪个接口的dfault方法
接口.super.方法名(参数)
举例说明
package nb;
interface Def{
default void deMt(){
System.out.println("default方法");
}
}
class AASS implements Def{
@Override
public void deMt(){
Def.super.deMt();
}
}
public class Deff {
public static void main(String[] args) {
AASS aass = new AASS();
aass.deMt();
}
}
7 抽象类和接口的区别
抽象类和接口都有子类,其中可以把接口实现的子类称为实现类
抽象类通常用来作为子类的模版,接口通常用来描述子类的行为
子类虽然只能继承一个抽象类,但可以同时实现任意多个接口
创建抽象类需要使用abstract关键字,创建接口需要实现interface关键字
声明抽象类中的抽象方法需要使用abstract关键字,声明接口中的抽象方法可以省略abstract
在接口中可以使用default关键字定义有方法体的非抽象方法,但在抽象类中不能用
在接口中不能有构造方法,但是在抽象类中可以有
在抽象类中可以有代码块,静态代码块和静态方法,但在接口中不能有
抽象类中的成员属性可以定义为任意群贤,任意类型,静态和非静态的方法,但在接口中不能有
子接口可以同时继承多个父接口,但是子抽象类只能继承一个父抽象类