学习笔记——抽象类与接口

学习笔记—抽象类与接口

第一节:抽象类

1. 我们为什么要使用抽象类
有些类创建对象不具体。需要把这个定义为抽象类
1.Animal animal=new Animal();
2.Pet pet=new Pet();
使用abstract修饰类变成抽象类:不能实例化,只能被继承抽象类的构造方法不能直接使用,只能被子类调用。

2. abstract关键字
关键字:abstract:抽象
可以修饰类:叫做抽象类
可以修饰方法:叫做抽象方法,没有方法体,需要使用分号表示声明结束,抽象方法所在的类必须是抽象类
子类必须重写父类的抽象方法,除非子类也是抽象类

3. 抽象方法
使用abstract关键字修饰,只表示声明了一个方法,但是没有任何的实现。
特点:
​1) 没有方法体,需要使用分号表示方法声明结束
​2) 如果一个类中有一个方法是抽象的,那么这个类必须是抽象的
​3) 抽象方法必须被子类重写,除非子类也是抽象类

4. 抽象类
使用abstract关键字修饰
特点:
​ 1)抽象类中可以包含抽象方法,也可以不包含抽象方法。
​ 2)抽象类中有构造方法,但是不能创建对象,构造方法可以在子类中会被调用
​ 3)抽象类的存在就是为了被继承,子类必须重写父类的抽象方法,除非子类也是抽象类。

5. 抽象类与普通类的区别
1)抽象类需要abstract,而普通类不需要
​ 2)构造方法:都有,但是抽象类不能实例化对象,普通类可以
​ 3)成员方法:抽象类中可以存在抽象方法也可以存在非抽象方法,而普通类中只能存在非抽象方法

- final与abstract是否可以连用呢?
1)两个关键字修饰方法时,final修饰的方法特点:可以被继承不能被重写;abstract修饰的方法特点:必须被重写;所以这两个关键字不能同时修饰同一个方法
2)两个关键字修饰类时:final修饰的类特点:不能被继承;abstract修饰的类特点:必须被继承;所以这两个关键字不能同时修饰同一个类
综上所述:final和abstract不可以连用。final的类中不能有abstract方法,但是abstract类中可以有final方法。

6. static,final,abstract对比
在这里插入图片描述
第二节:接口

1. 接口的概念
从语法上讲:接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有方法的实现。从功能上讲:接口表示一种约定(规范)或能力

2. 使用接口的好处
扩展类的功能,保持对外接口一致
接口实现了多重继承,完成类和任何实现接口子类的通信和交互
降低代码之间的耦合性

3. 接口的特点
1)接口不能创建对象,而且接口中没有构造方法
2)接口中的方法一般都是共有抽象方法:public abstract
3)接口中所有的属性都是共有静态常量属性:pulbic static final
在一个接口中声明方法时,若没有声明访问权限,默认也是public,若没其他修饰默认也是abstract;声明属性时,若没有声明访问权限和静态常量,默认也是public static final

public interface Usb {
 //常量
 String brand="xxx"; //前面省略public static final
 //方法
 void charge(); //前面省略 public abstract
}

4. 接口的声明语法
关键字interface:表示一个接口,接口interface和类class是平级关系
接口名命名习惯:
如果接口表示一种能力,命名采用:名字+后缀able ,比如 Serializable Comparable
如果接口表示一种约定或规范 ,按照类的命名规范 Usb , Comparator,CharSequence

语法:
public interface 接口名{
 //接口中的成员:抽象方法和静态常量
}

5. 接口的实现类
接口与类实现关系用“implement”关键字实现,一个类可以实现多个接口。

//语法
public interface K{
   public abstract void fun();
}
public class Impl implement K{
    public void fun(){}
}

思考:一个类实现某个接口之后,是否可以存在父类?
​ 可以,实现接口和继承类不冲突
注意:若一个类有父类同时也实现接口,声明类时,必须先继承再实现接口

public class Dog extends Animal implements I{
   public void fun(){}
}

6. 接口分类
1)普通接口:在接口中可以声明抽象方法,和静态常量属性
2)常量群接口:在接口中只声明一组静态常量属性
3)标志性接口:在接口中没有抽象方法,也没有静态常量,作用为了标记某个类具有某个功能

7. 接口与接口的关系
继承关系:使用关键字extends实现接口与接口的继承关系
接口继承的特点:
1)接口中没有私有成员,所以父接口中的所有成员都会被子接口继承
2)父子关系中都是接口,所以在子接口中不需要实现任何的抽象方法
3)接口可以多继承
思考:
现有类A和类B,两个类中都有fun()方法,假如类C继承类A和类B,当使用类C的对象调用fun方法时,如何执行?此时不知道执行那个fun方法,所以类不可以多继承。
现有接口A,B,两个接口中都有fun方法,接口C继承A,B,由于接口中的没有方法体,所在只要在接口C中存在了fun方法即可。所以接口支持多继承。

8. 接口的特殊方法:
1)jdk1.8之后接口中使用static关键字修饰的方法有方法体 静态方法需要有方法体 ,注意只能通过接口名.方法名调用,因为不能被继承
2)jdk1.8之后接口中使用default关键字修饰的方法有方法体 可以被继承,通过实现类调用

9. 抽象类和接口的区别
语法:
1)抽象类使用abstract,接口使用interface
2)抽象类中可以包含抽象方法,也可以包含非抽象方法,接口中只能包含抽象方法和静态常量,jdk1.8之后接口可以包含静态方法和默认方法。
3)抽象类和接口都不能实例化。
4)抽象类可以包含构造方法,接口中没有构造方法。
功能:
1)抽象类一般用来表示同类事物,接口可以表示不同类事物。
2)抽象类可以实现代码的重用,也可以约束子类的功能。接口就是约束实现类的功能,降低代码之间的耦合性。
使用场景:
1)程序或模块内部使用抽象类
2)程序架构或模块之间使用接口

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值