JAVA抽象类和接口
来源:互联网 发布:仿新浪微博源码 php 编辑:程序博客网 时间:2024/05/17 09:01
抽象类
使用abstract关键字修饰的类叫做抽象类
定义抽象类的语法格式: [访问修饰符] abstract class <类名>
普通类可以实例化,抽象类不能实例化,但是可以创建子类实例对象。
使用abstract关键字修饰的方法叫做抽象方法
定义抽象类的语法格式: [访问修饰符] abstract <返回值类型><方法名>([参数列表])
普通方法有方法体,抽象方法没有方法体。
几个要点:
- 抽象方法只能定义在抽象类里。也就是说有抽象方法的类一定是抽象类,抽象类不一定有抽象方法。
- 抽象类可以和普通类一样包含各类型的成员,包括属性和方法。
- 如果子类没有实现父类所有的抽象方法,子类必须被定义为抽象类
- 没有抽象构造方法,也没有抽象静态方法
- 抽象类中可以有非抽象的构造方法,创建子类实例时可能调用,继承树的顶层一般是抽象类
示例:
public abstract class Person{ //定义了抽象类 String name; //在抽象类中可以定义成员变量 private int age; public abstract void eat(); //在抽象类中可以定义抽象方法,抽象方法没有方法体 public void sleep(){ //在抽象类中也可以定义普通方法 System.out.print("正在睡觉......"); }}class Test{ public static void main(String[] args) { Person p = new Person(); //这种写法是错误的,抽象类不能直接被实例化,只能实例化子类对象 }}
接口
接口(interface)是一系列方法的声明,是抽象方法的集合。一个接口只有方法的特征,没有方法的实现。
面向接口编程就是只关心实现类有何能力,不关心实现细节;面向接口的约定,不考虑接口的具体实现。
接口是一种功能,是一种能力。一个类可以实现一个接口,使用关键字implements,实现一个接口就必须实现接口里声明的方法。如果说继承是一种
is a
的关系,那么接口就是一种has a
的关系,实现一个接口就是拥有某种能力。接口是一种标识,是一种约束。一个接口可以只有一个名字,接口里面什么也没有,方法的声明也没有,这种接口叫做标识接口,作用是标识一种身份。如java中的Serializalbe接口,接口里面什么也没有,只实现了这个接口,才能被序列化。
接口和类相似,但他们是不同的概念,类描述对象的属性和方法; 接口声明了一些方法的特征。
public interface MyInterface{ //定义一个接口 public static final COUNT = 100; //定义一个变量,只能是静态常量 public abstract void eat(); //定义一个方法,只能是public的抽象方法}//一个类只能继承一个父类,但是可以实现多个接口class Studnet extends Person implements A,B,C{}
接口示例:
public interface Lock {//定义一个接口,功能是上锁和开锁 public void lock(); public void unlock();}public interface Camera {//定义一个接口,功能是拍照 public void takePhoto();}public abstract class Gate {//定义一个抽象类,门 public abstract void open();//定义抽象方法,开门和关门 public abstract void close();}//防盗门类,继承门类,实现锁和拍照功能class ProofGate extends Gate implements Lock,Camera{ //实现抽象类的方法 public void open() { System.out.println("门开了"); } public void close() { System.out.println("门关了"); } //实现接口中声明的方法 public void lock() { System.out.println("门锁了"); } public void unlock() { System.out.println("门开锁了"); } public void takePhoto() { System.out.println("拍一下张来访者照片"); }}class Test { public static void main(String[] args) { ProofGate pg = new ProofGate(); pg.close(); pg.lock(); pg.takePhoto(); pg.unlock(); pg.open(); }}
标识接口示例:
public interface Human {//定义一个标识接口,标识人类}public interface Animal {//定义一个标识接口,标识动物}class Chinese implements Human{//实现标识接口}class American implements Human{//实现标识接口}class Wolf implements Animal{//实现标识接口}class Bear implements Animal{//实现标识接口}class Hunt { void hunt(Object obj){ //用标识判断识别身份,是人类就不能开枪 if(obj instanceof Human){ System.out.println("不能开枪,这是人类"); }else if(obj instanceof Animal){ //是动物就开枪 System.out.println("砰砰砰,开枪......"+obj.getClass().getName()+"被打死了"); } } public static void main(String[] args) { Hunt hunt = new Hunt(); Chinese man1 = new Chinese(); American man2 = new American(); Wolf wolf = new Wolf(); Bear bear = new Bear(); hunt.hunt(man1); hunt.hunt(man2); hunt.hunt(bear); hunt.hunt(wolf); }}
几个要点:
- 接口没有构造方法,无法被实例化,接口不是被类继承,而是可以被类实现。
- 接口类型可用来声明一个变量,指向此接口实现的对象,也就是接口可以实例化它的实现类的对象。
- 接口中不能有方法的实现。
- 接口中所有的变量会被隐式的指定为 public static final 变量(并且只能是 public);接口中的方法会被隐式的指定为 public abstract (只能是 public abstract,其他修饰符都会报错)。
- 实现类必须实现接口的所有方法,否则就必须声明为抽象类。
- 实现类可以实现多个接口,可以理解为JAVA中的多继承。
抽象类和接口的区别
相同点:
- 都代表了系统的抽象层,都很抽象
- 都不能被实例化
- 都能包含抽象方法
不同点:
- 抽象类中可以为部分方法提供默认实现,接口中只包含抽象方法,没有方法的实现。
- 一个类只有一个直接父类,但一个类可以实现多个接口。
- 已经存在的继承树,可以方便的抽取接口,担抽取抽象类不容易。
阅读全文
0 0
- Java 抽象类,抽象方法和接口
- Java抽象类和抽象方法、接口
- Java接口和抽象类
- java接口和抽象类
- java 接口和抽象类
- java接口和抽象类
- JAVA抽象类和接口
- java抽象类和接口
- java抽象类和接口
- Java:抽象类和接口
- java接口和抽象类
- Java 抽象类和接口
- JAVA抽象类和接口
- java抽象类和接口
- java接口和抽象类
- JAVA抽象类和接口
- Java抽象类和接口
- java 抽象类和接口
- Linux查看显卡信息及一些显卡的命令
- ubuntu16+cuda8.0+cudnn5+opencv3+caffe+ssd深度学习平台搭建步骤
- 线程池使用
- django—bootstrapt 前端网页开发总结
- python-np.hstack()避坑
- JAVA抽象类和接口
- java面向对象之设计思想
- Spring+mybatis+struts框架整合的配置详解
- 英语还是要学的,太软肋了
- 第20章 驱动开发之LED应用程序
- C++基础——用C++实例理解UML类图
- MAC之tar解压与压缩打包命令
- 使用pm2启动Vue项目
- 4.spring 依赖注入的三种方式