抽象和接口

抽象

面向对象的特性: 封装 继承 多态抽象

抽象的概述

当使用继承之后,若发现父类的方法肯定会被子类进行重写时,那么父类的方法可以定义为抽象方法,此时该类也变为了抽象类。(abstract)

抽象的使用

抽象方法

  • 抽象方法没有方法体

  • 抽象方法有修饰关键词:(abstract)

  • 父类中定义的抽象方法,必须在子类中进行方法重写(类似于:父债子还)

  • 在定义抽象方法之后,该类也成为了抽象类

访问权限修饰符 abstract 返回值类型 方法名 (形式参数列表);

Q:在子类中都重写了方法,父类中还定义抽象方法的意义?

A:在父类中定义抽象方法还有一个原因是因为配合多态使用,不然父类无法调用子类特有的行为或特征。

抽象类

  • 抽象类不可以创建对象,但可以拥有构造方法(构造方法用来给子类使用)

  • 抽象类,不一定拥有抽象方法(可以只有普通方法),但拥有抽象方法的类一定是抽象类。

  • 在子类继承了抽象的父类之后,必须(强制要求)重写对应的抽象方法,若子类不重写,那子类也为抽象类

  • 抽象类依旧可以用于多态的使用

  • 抽象类可以用于作为一个程序架构体系中的基类(基础类)

访问权限修饰符 abstract class 类名{
    // 属性
    // 方法体
}

匿名内部类

这种类只可以被使用一次,无法像在 Java 源文件中定义的带名类型一样反复使用

父类名 对象名 = new 父类名 (){
    重写相应的抽象方法
};
// 多态:父类的引用指向了子类的对象
// Vehicle bus = new Bus();
Vehicle vehicle = new Vehicle() {
    @Override
    public double calRent(int rentDays) {
        return 1+1+rentDays;
    }
};
double calRent = vehicle.calRent(10);
System.out.println(calRent);

※接口※

接口的概述

Java 支持单继承。

只可以有一个父类,

需求:现有一个玻璃门,拥有开门和关门的功能

分析:

  • 发现对象:一个玻璃门

  • 分析对象的特征和行为

    特征:材质为玻璃

    行为:

    • 开门

    • 关门

  • 分析出一个玻璃门类 is a 门类

需求升级:现在有一个铁门,要求测试其开门和关门,以及上锁和开锁的功能。

  • 铁门类 is a 门类

需求升级:现在有一个防盗门,要求测试其开门和关门,以及上锁和开锁的功能,从猫眼查看门外。

  • 防盗门类 is a 门类


Java 只能实现类的单继承,却可以通过接口来实现 “多继承”。

类继承:子类 is a 父类

实现接口:子类 has a 父类

理解:你只能有一个亲爹,但是你可以有若干个干爹。

接口的使用

  • 在接口中,定义的方法主要是公共的抽象方法

    • 在 Java 8 之前,接口中只能定义公共的抽象方法

    • 在 Java 8 之后,接口中允许定义公共的默认(default)的方法,这样就不是强制子类重写方法啦

  • 在接口中定义的属性都是公共的静态常量

  • 接口之间可以使用继承关键字(extends)

  • 接口没有构造方法,也不可以创建对象

可以将定义接口,使用接口的步骤,联想对比定义和使用父类的步骤

1.定义父类:接口

访问权限修饰符 interface 接口名{
    属性;
    行为;
}

在接口中只要定义的是行为。

2.子类继承父类:实现接口

访问权限修饰符 class 子类名 implements 接口名1, 接口名2, ....{
  
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值