标签:ati 自己 性方面 调用 静态 封装 继承 基类 分割
什么是继承?
继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能。多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可。多个类称为子类,单独的那个类称之为父类,超类、或者是称为基类。
什么是接口?
接口在Java编程语言中是一个抽象类型,是抽象方法的集合,接口并不是类,编写接口的方法和类很相似,但是他们属于不同的概念,类描述对象的属性和方法,接口则主要是包含类要实现的方法。在人们讲到接口的时候,一般会有两方面的含义:第一种就是讲的Java接口,这是一种在Java语言中存在的结构,有特定的语法和结构;另一种仅仅是指一个类所具有的方法的特征的集合,是一种逻辑上的抽象。前者叫Java接口,后者就是叫接口。
一个Java接口是一些方法特征的集合,这些方法当然来自于具体的方法,但是他们一般都是来自于在系统中不断出现的方法。一个接口只有方法的特征,但是没有方法的具体实现,因为这些方法在不同的地方被实现的时候可能会有完全不同的功能或者行为。
在Java语言中,接口还可以被定义为public的常量。
二、方法的特征:
在Java语言规范中,一个方法的特征包括方法名、参数的数目和种类,但方法的返回值类型、参数的变量名、还有抛出的异常都不属于方法的特征。
在Java语言编译器检查方法的重载的时候就只是根据方法的特征进行判断两个方法是不是重载,但是在Java编译器检查方法的置换的时候,则会进一步的检查两个方法的返回值类型和所抛出的异常类型。
三、区分接口继承和实现继承
一个类实现一个接口,这种关系叫做接口继承,而一个类是另一个类的字类,这种关系叫做实现继承。接口继承和实现继承的规则是不同的,一个类最多只能实现继承一个超类,但是可以同时实现多个接口。
四、接口和类最重要的区别:
接口仅仅描述方法的特征,而不给出方法具体的实现;但是类不单单给出方法的特征,还给出方法的实现。因此接口把方法的特征和方法的实现分割开来。这种分割,体现在接口常常代表的是一个角色,它负责封装与该角色相关的操作和属性,而实现这个接口的类则是扮演这个角色的演员。想通过的角色可以由不同的演员来演,而不同的演员之间除了扮演的是同一个角色之外,并不要求有其他的共同之处。
五、为什么要使用接口
如果没有接口,可插入性就不会有保证,接口让可插入性变成可能。接口提供了关联以及方法调用上的可插入性,软件系统的规模越大,声明周期越长,接口的重要性就越明显,接口使得软件系统在灵活性和可扩展性、可插入性方面得到保证。
六、Java接口常用的方法
单方法接口:接口中只有一个方法,这个方法可以看作是这个接口的唯一内容。这种做法可以看作是c语言中函数指针的对应物。
标识接口:表示接口是没有任何方法和属性的接口,表示接口不对实现它的类有任何的语义要求,它仅仅表示实现它的类属于一个特定的类型。标识接口通常使用在工具类中,在其他的类里边很少使用到。
常量接口:实际上,Java接口应当仅仅用来生命一种新的类型,而不应该用来干别的事情。接口常量是指的用接口来声明一些常量,然后有实现这个接口的类使用这些常量。这样一来,凡是实现这个接口的Java类都会自动的继承这些常量,并且都可以像使用自己的常量一样使用这些常量。
七、Java构建模型的顶端是Object类,所有的Java类,包括数组对象,都已这个类为超类。需要说明的是:这是一个具体的类,既不是Java接口也不是Java抽象类。
八、Java语言是类型安全的,Java语言依靠三种机制做到了这一点:编译期间的类型检查、自动的存储管理、数组的边界检查。任何被Java编译器接受的合法的Java类保证是类型安全的,在程序运行期间,不会有任何类型的错误。
优点:
缺点:
使用继承需要记住这几句话:
什么时候使用继承?
如果类之间的关系存在着:is a 的关系,就需要考虑使用继承,但是也不能为了继承某个类的部分功能就盲目的使用继承。
所以说当我们使用继承的时候,我们需要确信使用继承确实是有效可行的办法。那么到底要不要使用继承呢?《Think in java》中提供了解决办法:问一问自己是否需要从子类向父类进行向上转型。如果必须向上转型,则继承是必要的,但是如果不需要,则应当好好考虑自己是否需要继承。
重写接口中声明的方法时需要注意一下几点:
在具有继承关系的类进行实例化的过程中,构建实例的过程是从父类“向外”扩散的,也就是从父类开始向子类一级一级的完成构建,但是我们并没有显式的调用父类的构造器,这就是Java的高明之处:编译器会默认给子类调用父类的无参构造器。
默认调用父类的构造器是有前提的:父类必须有默认的构造器(父类的代码中没有显式的构造器),如果父类没有默认的构造器,那么我们在子类中就必须使用super()来显式的调用父类的构造器,并且必须是在子类构造器中的第一行代码,否则编译器就会报错。
标签:ati 自己 性方面 调用 静态 封装 继承 基类 分割
原文地址:https://www.cnblogs.com/BaoZiY/p/10146187.html