java抽象类和接口有什么区别,java中抽象类可以实现接口么

  java抽象类和接口有什么区别,java中抽象类可以实现接口么

  

目录

抽象类什么是抽象类?摘要属于什么类型?如何定义抽象类?上课是为了什么?什么是抽象方法?非抽象类继承抽象类抽象类总结接口基本语法接口实现接口和多态联合使用继承和实现并发接口功能类型和关系总结开发中

 

  

抽象类

 

  

什么是抽象类?

 

  而抽象类是通过提取这些共性特征,并进一步抽象而形成的。因为类不存在,所以抽象类不能创建对象。

  00-1010抽象类也是引用数据类型。

  00-1010[修饰符列表]抽象类名{类体;}

  00-1010抽象类不能实例化,不能创建对象,所以抽象类习惯被子类继承,抽象类中的构造方法可以被子类使用。

  Final abstract和final abstract是两个对立的关键词,不能一起使用。

  00-1010抽象方法是指没有实现和方法体的方法。

  例如:

  公共抽象void doSome();特点一:抽象方法没有方法体,以分号结尾。

  特点二:抽象方法前面的修饰符列表必须有abstract关键字。

  特点:抽象类中不能有抽象方法,但抽象方法只能出现在抽象类和接口中。

  易:不是所有没有方法体的方法都叫抽象方法!

  00-1010以以下代码为例:

  代码

  //抽象类公共抽象类Animal {//抽象方法公共抽象void move();}//非抽象类继承抽象类类Bird extends Animal{}。这种写法有问题吗?有问题!

  编译器会给出以下结果:

  抽象方法只能出现在抽象类中。当Bird类继承Animal类时,它会继承抽象方法,所以我们需要重写Bird类中的抽象方法。

  代码

  //抽象类公共抽象类Animal {}//非抽象类继承抽象类class Bird Extensions Animal {//upper up Animal a=new Bird();}这样写有问题吗?没问题!

  A的类型是Animal,是抽象的,所以这是面向抽象的编程,降低了程序的耦合度,提高了程序的扩展性。

  00-1010抽象类是在类前面加抽象定义的。抽象类不能实例化,不能创建对象,所以抽象类习惯于被子类继承。与最终摘要相反,它不能组合使用。Class子类可以是抽象的,也可以是非抽象的。虽然抽象类不能实例化,但是抽象类有构造方法,可以被子类使用。抽象类中不一定有抽象方法,但抽象方法只能出现在抽象类和接口中。抽象方法的定义:公共抽象void do some();非抽象类继承抽象类,必须覆盖抽象类中的抽象方法。

  

抽象类属于什么类型?

 

  00-1010接口也是‘引用数据类型’,编译后也会形成类字节码文件。接口是完全抽象的(抽象类是半抽象的)。接口的语法如下:3360[修饰符列表]接口接口名称{.}//修饰符列表不用写接口就可以支持多重继承,一个接口可以继承多个接口。接口只包含两部分:常量和抽象方法。接口中的所有元素都由public修饰,并且是公共的。在接口中定义抽象方法时:可以省略公共抽象修饰符。在接口中定义常量时:可以省略public static final修饰符。

  00-1010类之间有继承,接口和类之间有类似的关系,这叫实现。

  接口实现的关键词:

  code>implements

  语法如下:

  

class A implements B{......}

我们也可以把实现看成一种特殊的继承(接口和类之间的关系),但是要注意关键字的不同。

 

  注意点:

  一:实现的关键字与继承不同,是implements。

  二:当非抽象类实现接口时,一定要将接口中的抽象方法重写。

  三:在类中实现接口中抽象方法时,修饰符列表不能省略。

  四:一个类可以实现多个接口,这样弥补了类和类之间只存在单继承的缺陷。

  

 

  

接口和多态联合使用

接口是完全抽象的,无法实例化,但是接口可以通过实现与多态联合使用。

 

  如下:

  

//接口interface A{ //抽象方法 int add(int a , int b);}//一个类实现了接口Bclass B implements A{ //重写了接口中的抽象方法 public int add(int a , int b){ return a+b; } public static void main(String[] args) { //A接口的引用指向了B类的对象 //面向接口编程 A a = new B(); }}

 

  

继承和实现同时出现

extends 和 implements可以同时出现,同时出现时,要将extends写在前面,inplements写在后面。

 

  

class Animal{}interface Flyable{ void fly();}//当继承和实现同时出现时,继承写前面,实现写后面class Bird extends Animal implements Flyable{ public void fly(){ System.out.println("Bird学会了飞翔!"); } public static void main(String[] args) { Flyable b = new Bird(); b.fly(); }}

 

  

接口在开发中的作用

面向接口编程,可以降低程序耦合度,提高程序扩展力,符合ocp开发原则。

 

  任何一个接口都有调用者和实现者,调用者面向接口调用,实现者面向接口编写实现,接口和多态一起使用可以将调用者和实现者解耦合(切断二者的关系)。

  

 

  

类型和类型之间的关系

is a

 

  Cat is a Animal

  凡是能满足 is a 的表示继承关系,可以让Cat类继承Animal类。

  has a

  Bird has a Wing

  凡是能满足 has a 的表示关联关系。

  管理关系通常以属性的修饰存在,可以将Wing定义为Bird类中的一个实例变量。

  like a

  Cook like a Menu(比较抽象)

  凡是能满足 like a 的表示实现关系,可以用Cook这个类来实现Menu这个接口。

  

 

  

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注盛行IT的更多内容!

 

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: