java基础知识总结--继承和接口

什么是继承?什么是接口?他们之间的区别和联系是什么?

什么是继承?

  继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能。多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可。多个类称为子类,单独的那个类称之为父类,超类、或者是称为基类。

什么是接口?

  接口在Java编程语言中是一个抽象类型,是抽象方法的集合,接口并不是类,编写接口的方法和类很相似,但是他们属于不同的概念,类描述对象的属性和方法,接口则主要是包含类要实现的方法。在人们讲到接口的时候,一般会有两方面的含义:第一种就是讲的Java接口,这是一种在Java语言中存在的结构,有特定的语法和结构;另一种仅仅是指一个类所具有的方法的特征的集合,是一种逻辑上的抽象。前者叫Java接口,后者就是叫接口。

一个Java接口是一些方法特征的集合,这些方法当然来自于具体的方法,但是他们一般都是来自于在系统中不断出现的方法。一个接口只有方法的特征,但是没有方法的具体实现,因为这些方法在不同的地方被实现的时候可能会有完全不同的功能或者行为。

在Java语言中,接口还可以被定义为public的常量。

二、方法的特征:

在Java语言规范中,一个方法的特征包括方法名、参数的数目和种类,但方法的返回值类型、参数的变量名、还有抛出的异常都不属于方法的特征。

在Java语言编译器检查方法的重载的时候就只是根据方法的特征进行判断两个方法是不是重载,但是在Java编译器检查方法的置换的时候,则会进一步的检查两个方法的返回值类型和所抛出的异常类型。

三、区分接口继承和实现继承

一个类实现一个接口,这种关系叫做接口继承,而一个类是另一个类的字类,这种关系叫做实现继承。接口继承和实现继承的规则是不同的,一个类最多只能实现继承一个超类,但是可以同时实现多个接口。

四、接口和类最重要的区别:

接口仅仅描述方法的特征,而不给出方法具体的实现;但是类不单单给出方法的特征,还给出方法的实现。因此接口把方法的特征和方法的实现分割开来。这种分割,体现在接口常常代表的是一个角色,它负责封装与该角色相关的操作和属性,而实现这个接口的类则是扮演这个角色的演员。想通过的角色可以由不同的演员来演,而不同的演员之间除了扮演的是同一个角色之外,并不要求有其他的共同之处。

五、为什么要使用接口

如果没有接口,可插入性就不会有保证,接口让可插入性变成可能。接口提供了关联以及方法调用上的可插入性,软件系统的规模越大,声明周期越长,接口的重要性就越明显,接口使得软件系统在灵活性和可扩展性、可插入性方面得到保证。

六、Java接口常用的方法

单方法接口:接口中只有一个方法,这个方法可以看作是这个接口的唯一内容。这种做法可以看作是c语言中函数指针的对应物。

标识接口:表示接口是没有任何方法和属性的接口,表示接口不对实现它的类有任何的语义要求,它仅仅表示实现它的类属于一个特定的类型。标识接口通常使用在工具类中,在其他的类里边很少使用到。

常量接口:实际上,Java接口应当仅仅用来生命一种新的类型,而不应该用来干别的事情。接口常量是指的用接口来声明一些常量,然后有实现这个接口的类使用这些常量。这样一来,凡是实现这个接口的Java类都会自动的继承这些常量,并且都可以像使用自己的常量一样使用这些常量。

七、Java构建模型的顶端是Object类,所有的Java类,包括数组对象,都已这个类为超类。需要说明的是:这是一个具体的类,既不是Java接口也不是Java抽象类。

八、Java语言是类型安全的,Java语言依靠三种机制做到了这一点:编译期间的类型检查、自动的存储管理、数组的边界检查。任何被Java编译器接受的合法的Java类保证是类型安全的,在程序运行期间,不会有任何类型的错误。

继承的主要特点?

优点:

  • 子类不能选择性的继承父类。
  • Java语言只支持单继承,也就是一个类只能有一个父类。
  • Java支持多层继承体系。
  • 子类可以直接访问父类中的非私有的属性和方法。
  • 对于构造器来说,子类只能是调用父类的构造器,不能继承。
  • 继承的使用提高了代码的复用性。
  • 继承让类和类之间产生了关系,这是多态的前提。
  • 在面向对象设计程序的过程中使用继承原则,就是在每一个有一般类和特殊类形成的一般+特殊的结构中,把一般类的对象实例和所有特殊类的对象实例都共同拥有的属性和方法一次性的在一般类中进行显示的定义,在特殊类中不再重复的定义一般类中已经定义的东西。但是在语义上,特殊类却自动的隐含的拥有他的一般类的(以及所有更上一层的一般类)中定义的属性和方法。特殊类的对象拥有一般类的全部属性和方法。

缺点:

  • 父类变,子类就必须会变
  • 继承破坏了封装性,对于父类而言,他的实现细节对子类来说都是透明的
  • 继承是一种强耦合关系。
  • 接口无法被实例化,但是接口只能被别的类实现。
  • 一个实现接口的类,必须实现接口内描述的所有的方法,否则就要声明为抽象类。

接口的主要特点?

  • 接口无法被实例化,但是接口只能被别的类实现。
  • 一个实现接口的类,必须实现接口内描述的所有的方法,否则就要声明为抽象类。

如何实现继承?

使用继承需要记住这几句话:

  • 通过使用extends关键字让类与类之间产生继承关系。
  • 子类拥有父类非private的属性和方法。
  • 子类可以拥有自己属性和方法,即子类可以对父类进行扩展。
  • 子类可以用自己的方式实现父类的方法。

接口和类的相似点?

  • 一个接口可以有很多的方法。
  • 接口文件保存在以.java结尾的文件中,文件名必须是接口名。
  • 接口的字节码文件保存在.class结尾的文件中。
  • 接口相应的字节码文件必须在与包名称相匹配的目录结构中

接口和类的区别?

  • 接口不能用于实例化
  • 接口没有构造方法
  • 接口中所有的成员方法必须是抽象方法
  • 接口不能包含成员变量,除了static和final变量。
  • 接口不能被类继承,只能被类实现。
  • 接口是支持多“继承”的

什么时间用继承?什么时间用接口?

什么时候使用继承?

如果类之间的关系存在着:is a 的关系,就需要考虑使用继承,但是也不能为了继承某个类的部分功能就盲目的使用继承。

所以说当我们使用继承的时候,我们需要确信使用继承确实是有效可行的办法。那么到底要不要使用继承呢?《Think in java》中提供了解决办法:问一问自己是否需要从子类向父类进行向上转型。如果必须向上转型,则继承是必要的,但是如果不需要,则应当好好考虑自己是否需要继承。

重写接口中声明的方法时需要注意一下几点:

  • 类在声明接口的时候,不能抛出强制性,只能在接口中或者继承接口的抽象类中抛出强制性异常。
  • 类在重写接口中的方法时,必须要保持方法名的一致性,并且返回值的类型也必须要相同或者相互兼容。
  • 如果实现接口的是一个抽象类,那么就没有必要实现该接口中的所有方法。

继承中构造器的调用顺序是什么?

在具有继承关系的类进行实例化的过程中,构建实例的过程是从父类“向外”扩散的,也就是从父类开始向子类一级一级的完成构建,但是我们并没有显式的调用父类的构造器,这就是Java的高明之处:编译器会默认给子类调用父类的无参构造器。

默认调用父类的构造器是有前提的:父类必须有默认的构造器(父类的代码中没有显式的构造器),如果父类没有默认的构造器,那么我们在子类中就必须使用super()来显式的调用父类的构造器,并且必须是在子类构造器中的第一行代码,否则编译器就会报错。

接口的特性

  • 接口是隐式抽象的,当声明一个接口的时候,不必使用abstract关键字。
  • 接口中的每一个方法都是隐式抽象的,接口中的方法会被隐式的指定为public abstract,并且只能是public abstract,其他的修饰符都会被编译器报错。
  • 接口中可以含有变量,但是接口中的变量会被隐式的指定为public static final变量,并且只能是public static final 用其他的修饰符就会被编译器报错。
  • 接口中的方法都不能在接口中实现,只能在实现接口的类对象里实现接口中的方法。
  • 一个接口能继承另一个接口,和类之间的继承方式比较相似。接口的继承使用extends关键字,子接口继承父接口的方法。

抽象类和接口的区别

  • 抽象类里边的方法可以有方法体,就是能实现方法的具体功能,但是接口中的方法不行,接口中的方法必须是抽象方法。
  • 抽象类中的成员变量可以是各种类型的,但是接口中的成员变量只能是public static final类型的。
  • 接口中不能含有静态代码块和静态方法,但是抽象类中可以有静态代码块和静态方法。
  • 一个类只能继承一个抽象类,但是一个类可以实现多个接口。

标记接口

  • 定义:标记接口是没有任何方法和属性的接口,它仅仅表明它的类属于一个特定的类型。
  • 作用:简单形象地说就是给某个对象打个标记,是对象拥有某项或者是某些特权。

原文地址:https://www.cnblogs.com/BaoZiY/p/10146187.html

时间: 2024-10-31 01:25:36

java基础知识总结--继承和接口的相关文章

java基础知识回顾之javaIO类--File类应用:过滤器接口FilenameFilter和FileFilter

FilenameFilter和FileFilter都是用来过滤文件,例如过滤,以.jpg或者.java结尾的文件,通过看他们的源码:通过使用File类中String[] list(FilenameFilter filter)或者public File[] listFiles(FileFilter filter)方法,把FilenameFilter或者FileFilter接口对象作为参数传入,通过实现接口里面的 boolean accept(File dir, String name) 或者boo

Java 基础知识之-------------Override 与 Overload

override可以翻译为覆盖,从字面就可以知道,它是覆盖了一个方法并且对其重写,以求达到不同的作用.对我们来说最熟悉的覆盖就是对接口方法的实现,在接口中一般只是对方法进行了声明,而我们在实现时,就需要实现接口声明的所有方法.除了这个典型的用法以外,我们在继承中也可能会在子类覆盖父类中的方法.在覆盖要注意以下的几点: 1.覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果: 2.覆盖的方法的返回值必须和被覆盖的方法的返回一致: 3.覆盖的方法所抛出的异常必须和被覆盖方法的所抛

java基础知识(二)

1.关于static关键字总结: 1.不能在static修饰的方法中引用this变量,只能引用一些静态变量或方法,或new新的对象(可以定义局部变量). 简言之,静态方法或块中,只能引用静态的方法或变量. 2.类中的成员变量(static修饰)有缺省值,而类的定义的方法中的局部变量没有缺省值. 3.在类的构造器中,可以引用任何的静态或非静态的变量和方法,可以在非static方法中调用static方法. 4.static{}块中的代码在类装载中仅执行一次. 5.在7-7,A staticmetho

java基础知识回顾之关键字

其实java中的常用关键字并不多,总共加起来也没有多少个,具体见如下这张表: private,protect,public 在java中,在类,类的属性和累的方法前面加上一个修饰符来对其进行访问权限上的控制.除了使用private,protect,public之外, 还有一种是default情况,即使不加任何权限修饰符.关于这四中情况的权限差别见下表: 注意:default不是修饰符,他表示一种不加任何修饰符的情况. 这里,主要看一看static,instanceof,final关键字的含义和如

【java基础知识总结】-特别针对零基础学习JAVA的初学者

JAVA基础知识总结,对于大多数想要学习JAVA编程语言的人员来说或者对于那些已经在学习路上的新手来说,掌握以下的JAVA基础知识,或许将更有利于你快速掌握好这门语言.以下是本人对JAVA基础知识做了一下小结,如有纰漏,还望大家不吝赐教. 1.对象的初始化 (1)非静态对象的初始化 在创建对象时,对象所在类的所有数据成员会首先进行初始化. 基本类型:int型,初始化为0. 如果为对象:这些对象会按顺序初始化. ※在所有类成员初始化完成之后,才调用本类的构造方法创建对象. 构造方法的作用就是初始化

java基础知识回顾之面向对象

一 . 抽象类 什么是抽象类?很简单,就是用abstract关键字修饰,并允许包含未实现方法的类. 什么时候定义抽象类?在有些情况下,可能有些方法无法确定要怎么实现,这时就可以定义抽象类,无法实现的方法定义成抽象方法. 抽象类的特性: 1. 不能实例化,即不能创建对象,只能作为父类被继承. 2. 子类继承一个抽象类后,必须实现父类的抽象方法. 3. 抽象类中可以有抽象方法,也可以不包含抽象方法,但如果包含抽象方法,就必须定义成抽象类. public abstract class Shaoe{ p

java基础知识小小结

java基础知识小总结 在一个独立的原始程序里,只能有一个 public 类,却可以有许多 non-public 类.此外,若是在一个 Java 程序中没有一个类是 public,那么该 Java 程序的文件名就可以随意命名了. 文档注释,是以单斜线加两个星形标记( /**)开头,并以一个星形标记加单斜线( */)结束.用这种方法注释的内容会被解释成程序的正式文档,并能包含进如 javadoc之类的工具生成的文档里,用以说明该程序的层次结构及其方法. Java 把整数常量的数据类型均视为 int

Java基础知识的三十个经典问答

Java基础知识的三十个经典问答 1.面向对象的特点 抽象: 抽象是或略一个主题中与当前目标的无关的因素,一边充分考虑有关的内容.抽象并不能解决目标中所有的问题,只能选择其中的一部分,忽略其他的部分.抽象包含两个方面:一是过程抽象:一是数据抽象. 继承 继承是一种联接类的层次模型,允许和鼓励类的重用,提供了一种明确的共性的方法.对象的一个新类可以从现有的类中派生,这叫做类的继承.心累继承了原始类 的特性,新类称为原始类的派生类或者是子类,原始类称为新类的基类或者父类.子类可以从父类那里继承父类的

Java基础知识(二)

1,字符串 new String("abc")创建了几个对象? 一个或两个,如果常量池中原来有"abc",则只创建一个对象:如果常量池中原来没有字符串"abc",那么就会创建两个对象. String s="abc"; String s1="ab"+"c"; System.out.println(s==s1); 输出 true ,因为"ab"+"c"