抽象类和接口

一、抽象类

        父类中的某些方法存在的意义就是让子类重写的,因此该方法的函数体的代码没有意义,但是不屑就会报错,so,如果一个方法不需要函数体部分,则可以将这个方法声明为抽象方法

抽象方法:没有方法体的方法,java中使用abstract关键字声明抽象方法

格式:   

访问修饰符     abstract   返回值类型   方法名称();

public abstract class A(){
  
    //约束有人帮我们实现
    //abstract,抽象方法,只有方法名,没有方法的实现!

   public abstract void doSomething();

   }


//抽象类的所有方法,继承了它的子类,都必须要实现它的方法
public class B extends A(){

  @Override
  public void doSomething(){

  }
}

抽象类的特点

  • 抽象类中可以没有抽象方法,但是有抽象方法的类一定要声明为抽象类
  • 抽象类不能使用new关键字来创建对象,它是用来让子类继承的
  • 抽象方法,只有方法的声明,没有方法的实现,它是用来让子类实现的
  • 子类继承抽象类,就必须要实现抽象类没有实现的抽象方法,否则盖子类也要声明为抽象类

二、接口

1.定义接口

        定义普通的类或者抽象类可以使用class关键字,定义接口必须interface关键字完成,java中的接口是可以多实现的。

接口本质上就是特殊的类,特殊抽象类,接口中的所有的方法都是没有实现的(抽象方法)。

接口中的所有方法和属性都是默认是public,即便没有使用public修饰!

        接口的实现使用的是implements关键字实现接口,子类一旦实现了接口,必须要实现接口所有的抽象方法,如果不想实现,则必须将子类声明为抽象类,接口也无法实现实例化,必须使用子类,以多态的形式完成实例化。

        接口就是规范,定义的是一组规则,体现了现实世界中“如果你是……则必须能……”的思想,比如:如果你是汽车,你就必须能跑,等等。制定了之后就必须遵守。

public interface UserService(){

    //常量--默认public static final
    int a = 111;

    //接口中的所有定义方法其实都是抽象的--默认public abstract
    void add(String name);
    void delete(String age);
    void update(String address);
 
}


public interface TimeService(){
    void time();
}

//抽象类:extends
//类 可以实现接口 implement 接口
//实现了接口的类,就必须重写接口中的方法
public class UserServiceImpl implement UserService,TimeService{
    @Override
    public void add(String name){
    
    }
    @Override
    public void delete(String age){
    
    }
    @Override
    public void update(String address){
    
    }
    @Override
    public void time(){
    
    }
}

2.接口中成员的特点

1. 接口中可以定义变量,但是变量必须有固定的修饰符修饰,public static final 所以接口中的变量也称之为常量。

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

3. 接口中的成员都是公共的。

4. 接口不可以创建对象。

5. 子类必须覆盖掉接口中所有的抽象方法后,子类才可以实例化。否则子类是一个抽象类.

接口最重要的体现:解决多继承的弊端。

接口与抽象类的相同点:

  • 都位于继承的顶端,用于被其他实现或继承;
  • 都不能实例化;
  • 都包含抽象方法,其子类都必须覆写这些抽象方法;

接口与抽象类的区别:

  • 抽象类为部分方法提供实现,避免子类重复实现这些方法,提供代码重用性;
  • 接口只能包含抽象方 法;
  • 一个类只能继承一个直接父类(可能是抽象类),却可以实现多个接口;
  • (接口弥补了Java的单继承)

二者的选用:

优先选用接口,尽量少用抽象类;

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

simpleHan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值