JAVA面向对象06:抽象类与接口

抽象类的定义

  • abstract可以用来修饰方法也可以修饰类,被abstrcat关键词修饰的类或方法都是抽象的
  • 抽象类中可以有普通方法或抽象方法,但抽象方法一定存在于抽象类中
  • 抽象类不可以使用new关键词来创建对象,只能通过继承方式
  • 抽象方法没有方法的声明和方法体,只能由子类继承并重写来实现
  • 若子类继承抽象类,子类就必须重写抽象类中所有的方法,要么子类也是抽象类
  • 虽然抽象类无法创建对象,但是抽象类存在构造器

父类Father

// 父类是抽象类
public abstract class Father {
    // 抽象方法,没有方法的声明实现
    public abstract void sleep();

    // 普通方法
    public void eat(){
        System.out.println("eat");
    }
}

子类Son

// 子类继承父类
public class Son extends Father{

    // 子类继承抽象父类必须重写父类中的方法
    @Override
    public void sleep(){
        System.out.println("sleep");
    }

    @Override
    public void eat(){
        System.out.println("sleep");
    }

    public void play(){
        System.out.println("play");
    }
}

测试类Application

public class Application {
    public static void main(String[] args) {
        // 子类调用抽象类父类的方法
        Son son = new Son();
        Father father = new Son();
        son.sleep();
        son.eat();
        ((Son) father).play();
    }
}

结果为:

sleep
sleep
play

接口的定义

  • 普通类:只有具体的实现(面向对象)
  • 抽象类:具体实现和抽象方法(规范)都有
  • 接口:只有规范

接口使用interface关键字来定义,同抽象类的定义类似,不过不作为类的Java文件,因此不能使用Class关键字来修饰,定义接口的基本格式如下:

     [修饰符] interface 接口名{

                  [public] [static] [final] 常量;
                 [public] [abstract] 方法;
      }

定义两个接口UaerService及ExploitationService

public interface UserService {
    // 常量 public static final 关键词可不使用,在接口中定义常量时默认定义
    public static final String name = "张三";

    // 方法 public abstract 关键词可不使用,默认定义为抽象方法
    public abstract void add();
    public abstract void delete();
    public abstract void update();
    public abstract void query();
}
public interface ExploitationService {
    void sleep();
}

实现接口的类UaerServiceImpl

public class UserServiceImpl implements UserService, ExploitationService {
    // 使用implements 实现接口时就必须重写接口内的方法,接口可以多实现(继承)
    @Override
    public void add() {

    }

    @Override
    public void delete() {

    }

    @Override
    public void update() {

    }

    @Override
    public void query() {

    }

    @Override
    public void sleep() {

    }
}

抽象类与接口的相同点与不同点

  • 相同点:
  1. 两者都是抽象的,都具有抽象方法,
  2. 都无法被实例化
  3. 都需其他类(子类)重写方法来实现
  • 区别:
  1. 抽象类只能单继承,接口可以多实现(继承)
  2. 抽象类定义使用abstract修饰,子类使用extends继承实现.接口定义使用interface修饰,其他类使用implement实现接口
  3. 抽象类是类有构造方法,接口不是类没有构造器
  4. 抽象类可以有具体方法和抽象方法,接口只有抽象方法
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值