Java抽象类,接口

抽象类

定义格式

abstract class 类名(){}

使用注意

特点

1.抽象类和抽象方法都需要被abstract修饰。抽象方法一定是定义在抽象类里面的。

2.抽象类不可以直接创建对象。原因:抽象方法调用没有意义。

3.子类必须重写所有的抽象方法。才可以创建对象,否则,这个子类还是一个抽象类

问题

1.抽象类一定是一个父类吗?

是的,因为抽象类是不断抽取来的

2.抽象类是否可以不定义抽象方法

可以,

3.抽象关键字不能与那些关键词共存

private:私有化的方法不能被总类继承使用。

static:不需要对象,直接用类名。

final:被final修饰的类没有子类。

接口

概念

接口是功能的集合,比抽象类更为抽象的”类“

定义

关键字 inteface

  • 定义格式

    • public interface 接口名{
          抽象方法1;
          抽象方法2;
          抽象方法3;
          抽象方法4;
      }
  • 注意事项

    • 接口中的方法为公共访问的抽象方法;

    • 接口方法无法定义普通的成员属性;

类实现接口

类与接口的关系为实现关系

类实现接口使用implements

class 类 implements 接口{
    重写接口中方法
}
  • 接口中定义功能,当需要具有该功能时,可以让该类实现该接口,只声明了应该具备该方法,是功能的声明。

  • 在具体实现类中重写方法,实现功能,是方法的具体表现。

接口中成员变量的特点

  • 接口中可以定义变量,但是便能量必须有固定的修饰符修饰。

    • public static final 数据类型 名字,常量的定义必须全部大写,所以接口中的变量也称之为常量(值不能改变)

  • 接口可以定义方法,也有固定的修饰符,public abstract

  • 接口不可以直接创建对象。

  • 实现接口的类,必须重写玩接口中所有的抽象方法,该类才可以实例化。

接口的多实现

在java中类只能单继承,不能多继承,但是接口可以多实现的。

接口实现格式

interface A{
    void method1();
}
interface B{
    void method2();
}
class C implements A,B{
    public void method1(){}
    public void method2(){}
}

类多继承的弊端,当类多继承时,如果多个父类具有相同的功能,子类调用就会产生不确定性

接口只是声明一个功能描述,没有具体的方法体,其实现全部由子类确定

继承类的同时实现接口

子类继承父类时继承了父类的可继承功能,这些功能都是子类应该具备的功能,如果想要继续扩展其他类的功能,这时要通过实现接口完成。

格式;

class A{
    public void method1(){}
}
interface B{
    void method2();
}
class C extends A implements B {
    public void method2(){
        
    }
}

父类定义的是事物的基本功能,接口定义的是事物的扩展功能。

接口的继承

接口与接口的关系:继承,使用extends

interface A{
    void method1();  
}
interface B{
    void method2();
}
interface C extends A,B{
    void method3();
}

由于接口中的方法都是抽象方法名字类在实现后不会发生调用的不确定性

接口的思想

  • 接口在开发中的好处

    • 接口的出现扩展了功能

    • 接口其实就是暴露出来的规则

    • 接口的出现降低耦合性,实现了解耦。耦合性(两者粘住,离不开)

接口和抽象类的区别

举例:

犬类:
    行为:
        吃饭;
        吼叫;
缉毒犬:
    行为:
        吃饭;
        吼叫;
        缉毒;

犬类分为很多种,他们吼叫方式,吃饭方式不一样,所以,在描述的时候不能具体化,那麽这是,就可以将这些行为描述为抽象行为,那么这个类就是抽象类。

当缉毒犬拥有额外功能时,而这个功能又不在这个事物体系内,这时,就可以让缉毒犬具备犬科自身特点的同时具有其他额外的功能,那么,这个额外的功能就可以定在接口中。

伪代码演示;

abstract class 犬类{
    public abstract void 吃饭();
    public abstract void 吼叫();
}
interface 缉毒{
    void 缉毒();
}
class 缉毒犬 extends 犬类 implements 缉毒{
    public void 吃饭(){
        
    }
    public void 吼叫(){
        
    }
    public void 缉毒(){
        
    }
}
class 缉毒猪 implements 缉毒{
    public void 缉毒(){
        
    }
}

通过上面的例子总结区别:

  • 相同点;

    • 都位于继承的顶端,用于被其他继承或实现

    • 都不能被实例化对象

    • 都包含抽象方法,其子类必须重写这些抽象方法

  • 区别:

    • 抽象类为部分方法提供实现,避免子类重复实现这些方法,提高了代码的复用性,而接口只能提供抽象方法

    • 一个类只能继承一个直接父类,但可以实现多个接口。

    • 抽象类是这个事物应该具备的内容,继承体系时is...a的关系:而接口是这个事物中额外的配置,实现体系是一种like...a的关系。

二者的选用:

  • 优先选用接口,少用抽象类

  • 需要定义子类的行为,又要为子类提供共性功能时,才选着使用抽象类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值