目录
抽象类(abstract)和接口(interface)
类的用途
1,放置静态属性,静态方法的地方
2,用来实例化对象的模板
3,用来供其他人继承
抽象类(abstract)
抽象类vs普通类:抽象类没有直接实例化对象的能力!
语法:在定义类时,添加抽象(abstract),这个类就被定义为了一个抽象类
如图,将Animal类定义为了抽象类
此时再去实例化Animal对象,会提示,即Animal类是抽象类,不能被实例化(instantiated(实例化的))
抽象方法
java语言赋予了抽象类一项普通类不具备的,新的能力:
抽象类中允许定义一些方法,但没有实现(没有方法体,只是声明),这些方法是专门留给子类去实现的。
这种方法被称为抽象方法。
抽象方法vs普通方法:1)被abstract修饰 2)没有方法体
若此时定义了一个Dog普通类,Dog extends Animal(抽象类),Dog必须要么是抽象类,要么就要去重写从父类(抽象类)中继承下来的抽象方法。
小结:
抽象方法只有抽象类中允许出现,不能出现在普通方法中。
所以上例中要么把Dog类变成抽象类去继承Animal的抽象方法,要么重写抽象方法把它变成普通方法。
使用抽象类的例子
线性表(抽象类)-> 顺序表,链表(具体类)
Animal(抽象类) -> Dog(具体类)
最终类(final)
上面最开头介绍了类的三种用途
抽象类(abstract)只能被继承不能实例化对象
而最终类(final)只能实例化对象不能被继承
final(最终),用final修饰类表示类是最终类
用Little_dog(普通类)去继承Dog1(最终类),提示
即不能去继承一个最终类 inherit:继承
最终方法:
抽象类,普通类都允许出现最终方法(通过final修饰),这种方法不允许被重写。
最终方法主要是给抽象类和普通类使用的(最终类不允许继承,没有重写方法这一说!)
小结:
抽象方法只允许出现在抽象类中
最终方法允许出现在任何类中
总结:
接口(interface)
定义:Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为。
特点:
没有属性
只能出现方法,且这些方法默认是抽象方法,并且被public修饰
从某些方面来说:接口是一个极端的抽象类(全部只有抽象方法的类)
接口的定义
public interface Walkable{ //具有走的能力的一个概念
void walk(); //接口中默认视为public abstract void fiy();
接口的实现
class Dog impements Walkable{
@Override
void walk();{......}
}
类与接口的差异:
1,逻辑概念上
类总是描述现实中的一类事物,可以描述抽象事物(动物,线性表),可以描述具体事物(狗,链表)
接口大多数时候表示一组能力的聚合,描述某种(某些)能力的东西(便于初学者理解的解释)
具备飞行能力(Flyable),具备行走能力(Walkable)
2,
1)类可以被继承(扩展extends)
class A extends B{......} A类继承自B类,只允许单继承
2)接口是用来被实现的(implements)
class X implements Y{...} A类实现了B接口,允许一个类同时实现多个接口
class X implements O,P,Q{...} A类实现了三个接口
接口是特殊的抽象类,故接口和抽象类都不能去实例化对象
现实世界中,使用抽象类或接口的情况有哪些?
比如A需要一个能提供排序能力的对象,B负责提供一个类去实现排序
这时可以由A提供一个抽象类或者接口,让B去重写方法或者实现接口
这样做的好处有:
1,A可以固定排序能力的边界
2,由于接口可以被多个类去实现,A可以找任意一个人去实现这个接口,不同人可以有不同的方法去实现接口
初学者阶段,代码程序较简单可以自己搞定,很少出现需要自己定义接口,抽象类,最终类的场景。
这时候同学们只要掌握是用别人定义的接口,抽象类即可!
接口的多继承
接口本身允许多继承,继承自另外的接口,同时允许多继承。
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) 类基本是描述一类事物,接口大多描述一组能力(要求)(初学者好理解)
接口中的其他知识了解
(初学者一般用得少,作为了解)
1,定义的属性都是静态属性,且被public修饰
2,允许定义静态方法
3,允许定义default方法
关于三种引用类型总结(结合多态)
理解了以上这些知识,我们可以再来研究一下java的数据类型
两大类型:基本数据类型,引用类型
基本数据类型(8种): byte,short,int,long,float,double,char,boolean
引用类型(三大类):
class 类型 String s; String是一个class
interface类型 Flyable f;Flyable是一个接口
array 类型 int[] t;
tips:
Clonable:具备clone能力的 当某个对象被Clonable修饰时,JVM会对其特殊处理,允许
SomeClass sc = new SomeClass();
SomeClass copy =clone sc;//对象的复制(拷贝,克隆)过程
这些知识可以帮助学编程的你了解抽象类,最终类,接口嘛?若您发现有错误请各位尽情批评指正!!
如果对你有帮助,可以的话请三连支持,谢谢!!