【Java】抽象类和接口

祝早日驱散阴霾


1. 抽象类

1.1 抽象类的概念

抽象类,顾名思义,这是不是一个具体的类,没有实际的功能,只是提供一个模板,由继承它的子类去实现它的功能.
1.用abstract修饰的类为抽象类。
2.抽象类中用abstract修饰的方法为抽象方法。
3.抽象类中也可包含普通数据成员和普通方法和构造方法。
4.抽象类不用非得包含抽象方法,但包含抽象方法的一定是抽象类。他们的关系如下图
在这里插入图片描述

1.2 抽象类的使用注意事项

1.抽象方法不能给出具体实现体,只能规定返回值类型,参数类型.

public abstract void wage();

如下图,抽象方法不能有方法体.必须由继承他的子类去实现.
在这里插入图片描述
2.因为抽象方法必须要允许继承后被重写,所以,抽象方法不能被private和default修饰,也不能由final和static修饰.
3.子类继承了抽象类后,若子类不能重写原抽象类中的所有方法,那么这个子类也是抽象类,需要用absract修饰.
如下图,子类software没能实现speciality中的所有抽象方法,所以,software类也是一个抽象方法,需要abstract修饰.
在这里插入图片描述
4.抽象类不能直接创建实例,如下图,抽象类不能直接实例对象.
在这里插入图片描述

1.3 抽象类的作用

普通父类也能实现类似的功能,那我们为什么要用抽象类呢?
类的实际应用中,是子类去进行实际的功能,但如是不小心用到了父类的实例化对象,编译器也不会报错.所以,使用抽象类可以避免使用父类实例化对象的错误.


2. 接口

2.1 接口的定义

我们日常生活中也有很多接口,例如安卓充电口和苹果充电口,只有符合对应规定的插头也能使用.Java中的接口也是只有符合相关特性的类才能使用对应的接口.

2.2 接口的使用规则

1.定义接口,与定义类的格式类似,只需将类定义格式中的class换成interface即可定义一个接口.如下图所示.
在这里插入图片描述
2.接口类型是引用类型,不能直接new接口对象
3.接口中的方法不能被实现,必须由继承接口的类来实现.如下图所示,接口中的方法不能有方法体.
在这里插入图片描述
4.接口中的方法类型只有public/public abstact两种写法,就算写的是public,也默认成public abstact
5.类继承接口,要用到关键字implements,如下图所示,类bird继承两个类.
在这里插入图片描述
6.接口中可以有变量,此变量被隐形指定为public static final,为一个不可变的常量.
在这里插入图片描述
7.接口中不能有静态代码块和构造方法.
8.类如果继承了多个接口,需要重写所有接口的所有方法,否则,这个类是抽象类.如下图,bird类没能重写所有方法,这个类为抽象类,需要用abstract修饰.
在这里插入图片描述
9.一个类只能继承一个父类,但能继承多个接口
10.接口可以继承多个接口.如下图所示
在这里插入图片描述

2.3 创建对象拷贝,实现Cloneable

public class Dog implements Cloneable{
    public Dog clone(){
        Dog d = null;
        try {
            d = (Dog) super.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return d;
    }

    public static void main(String[] args) {
        Dog d1 = new Dog();
        Dog d2 = d1.clone();
    }
}

3. 抽象类和接口的区别

种类抽象类接口
声明关键字abstractinterface
继承关键字extendsimplement
结构组成普通类加抽象方法抽象方法加常量
方法权限抽象方法权限是public,普通方法随意只能是public
关系一个抽象类实现可实现多个接口接口可以继承多个接口
子类限制一个子类继承一个抽象类一个子类实现多个接口
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值