[Java] 抽象类 和 接口(学习总结)

目录

抽象类:

一、引出

二、语法

三、特点

四、抽象类不能实例化对象,抽象类中允许出现抽象方法【正确】

五、使用抽象类的例子

六、最终类

七、小结

接口(interface)

一、定义

二、差异

三、接口的继承

四、接口 vs 抽象类

五、java中的数据类型

六、结合多态:上层的引用可以指向下层的对象


抽象类:

一、引出

类的用途:1.放置静态属性、静态方法的地方 2.用来实例化对象的模板 3.用来供其他人继承

当只想被人来继承,不想能用来实例化时,就可以用抽象类了

二、语法

抽象类和普通类对比,抽象类被剥夺了直接实例化对象的能力,在定义类的时候,添加抽象(abstract),这个类就是一个抽象类。

public abstract class Animal{ ... } Animal就是一个抽象类,不能实例化对象,Aniaml就只是被用来继承

三、特点

java语言中赋予了抽象类一项新的能力(普通类不具备):

抽象类中允许定义一些方法,但没有实现(没有方法体,只是声明),这些方法是专门留给子类们去实现的(重写),这种方法称为抽象方法。抽象方法:①被 abstract 修饰 ②没有方法体

public abstract void setName(String name);

类即使不包含抽象方法,也可以被声明为抽象类,防止被实例化。

四、抽象类不能实例化对象,抽象类中允许出现抽象方法【正确】

推断1:凡是抽象类中必须出现抽象方法 【错误】

推断2:抽象方法只能出现在抽象类中,不能出现在普通类中 【正确】

推断3:有抽象方法的是抽象类【错误】——没有抽象方法的也可以是抽象类

五、使用抽象类的例子

线性表(抽象类)-> 顺序表、链表(具体类)

比如:定义一个类代表一个线性表,里面有一个头插的方法(按照下标插入),作为线性表我们不知道按照下标插入怎么处理,就可以留给子类(顺序表、链表)来实现。定义顺序表和链表这样的类继承于线性表类,在他们中分别重写按照下标插入的方法,就可以表示,是根据顺序表按照下标插入还是根据链表按照下标插入。

六、最终类

只能实例化对象,不能被继承,通过 final 修饰类——public final class Dog{ ... }

抽象类、普通类、最终类都可以出现最终方法,这种方法不允许被重写。

七、小结

的三个职责:1.放置静态属性、静态方法的位置        2.实例化对象        3.被继承

抽象类(只能被继承)        最终类(只能被实例化)        普通类(可以被继承、可以被实例化)

在继承关系中,方法(不是静态方法)可以有三种形式:

1.一般方法:可以被子类重写,也可以不被子类重写——存在于:普通类、抽象类、最终类

2.抽象方法:专门用来被重写——存在于:抽象类

3.最终方法:不能被重写——存在于:普通类、抽象类、最终类

接口(interface)

一、定义

接口完全可以理解成一种特殊的抽象类,里面不会出现属性,只能出现方法,这些方法默认是抽象方法,并被public 修饰。从某些方向上说,接口是一个极端的抽象类(全部只有抽象方法的抽象类)public interfce Flyable{ void fly(); } //描述具备飞行能力的一个概念 ,里面的方法默认为 public abstract void fly();   里面的方法都是public的 可abstract的

二、差异

1.逻辑概念上:

总是描述现实中的一类事物,可以抽象事物(动物、线性表),或者是具体事物(狗、顺序表) 

接口大多数时候只是一组能力的聚合,描述具备某种(某些)能力的东西,但具体是什么东西,不知道,比如具备飞行能力、具备行走能力

2.可以被继承(extends)        class A extends B{ ... }——A类继承自B类,而且只允许单继承

接口是用来被实现(implements)        class X implements Y{ ... }——X类实现了Y接口,同时允许一个类同时实现多个接口                   class X implements O,P,Q{ ... }——X类实现了O、P、Q三个接口

接口和抽象类一样,不能去实例化对象

三、接口的继承

接口本身也允许继承,继承自另外的接口,同时允许多继承

interface A{ void a(); }        interface B{ void b(); }

interface Z extends A,B{ void z(); }  由于接口Z 继承自接口A 和接口B ,所以,最终Z 中有的抽象方法是 a()    b()    z()

四、接口 vs 抽象类

相同点:1.不能被实例化        2.允许出现抽象方法

不同点:1.接口只能出现抽象方法,其他内容统统没有

               2.普通类和抽象类之间的关系是继承(extends)关系,只能单继承普通类和接口之间的关系是实现(implements)关系,允许一个类实现多个接口

                3.接口和接口之间也允许继承(extends)关系,允许多继承

                4.抽象类中可以有属性、普通方法;接口中只能有抽象方法(默认都是public)

                5.类总归还是描述一类事物;接口大多描述一组能力

                6.抽象类是对一种事物的抽象,即对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。

五、java中的数据类型

基本数据类型:byte、short、int、long、float、double、char、boolean

引用类型:class类型   String s;String 是一个 class             

                   interface类型       Flyable f; Flyable 是一个接口

                   array类型            int[ ] t;

六、结合多态:上层的引用可以指向下层的对象

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值