目录
抽象类:
一、引出
类的用途: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;