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类型的。
- 接口中不能含有静态代码块和静态方法,但是抽象类中可以有静态代码块和静态方法。
- 一个类只能继承一个抽象类,但是一个类可以实现多个接口。
标记接口
- 定义:标记接口是没有任何方法和属性的接口,它仅仅表明它的类属于一个特定的类型。
- 作用:简单形象地说就是给某个对象打个标记,是对象拥有某项或者是某些特权。
java基础知识总结--继承和接口的更多相关文章
- Java基础知识(抽象类和接口)
一.抽象类 在了解抽象类之前,先来了解一下抽象方法.抽象方法是一种特殊的方法:它只有声明,而没有具体的实现.抽象方法的声明格式为: 1 abstract void fun(); 抽象方法必须用abst ...
- Java基础系列 - 抽象类继承和接口实现
package com.inter; /** * 继承和接口的关系,单继承,多接口 * java不支持多继承,但可通过接口实现多重继承 */ public class test2 { public s ...
- java 基础知识十 继承和多态
java 基础知识十 继承和多态 继承 1.定义: 继承是指声明一些类,可以再进一步声明这些类的子类,而子类具有父类已经拥有的一些方法和属性,这跟现实中的父子关系是十分相似的,所以面向对象把这种 ...
- java基础知识小总结【转】
java基础知识小总结 在一个独立的原始程序里,只能有一个 public 类,却可以有许多 non-public 类.此外,若是在一个 Java 程序中没有一个类是 public,那么该 Java 程 ...
- Java 基础知识(一)
Java基础知识篇: 一.关键字解释 1. final:修饰非抽象类,非抽象方法和属性, 以及修饰方法参数,代表“无法改变的”.出于对设计或者效率的考虑使用该关键字. final类无法被继承,fina ...
- Java 基础知识总结
作者QQ:1095737364 QQ群:123300273 欢迎加入! 1.数据类型: 数据类型:1>.基本数据类型:1).数值型: 1}.整型类型(byte 8位 (by ...
- Java基础知识回顾之七 ----- 总结篇
前言 在之前Java基础知识回顾中,我们回顾了基础数据类型.修饰符和String.三大特性.集合.多线程和IO.本篇文章则对之前学过的知识进行总结.除了简单的复习之外,还会增加一些相应的理解. 基础数 ...
- Java基础知识总结(超级经典)
Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java ...
- 毕向东—Java基础知识总结(超级经典)
Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java ...
随机推荐
- Senparc.Weixin微信开发(1) 开发验证
官方系列教程 http://www.cnblogs.com/szw/archive/2013/05/20/3089479.html 登录微信公众平台后-左侧找到开发--启用服务器配置 这样,我们才可以 ...
- 将现有项目添加到TFS中
假设在Projects文件夹中有一个名为WpfApplication1的项目需要添加到TFS. 我们可以这样做: 1.打开视图->团队资源管理器,点击管理连接,在弹出的窗口中选择服务器和团队项目 ...
- 删除Apache服务的命令
转到\Apache24\bin目录下,使用cmd命令sc delete apache2.2
- C#学习-析构函数
析构函数用于在类销毁之前释放类实例所使用的托管和非托管资源. 对于C#应用程序所创建的大多数对象,可以依靠.NET Framework的垃圾回收器(GC)来隐式地执行内存管理任务. 但是,若创建封装了 ...
- Git坑换行符自动转换 [转载]
转自https://www.cnblogs.com/zjoch/p/5400251.html 源起 一直想在 GitHub 上发布项目.参与项目,但 Git 这货比较难学啊.买了一本<Git 权 ...
- phpmyadmin详细的图文使用教程
做网站用到服务器有很多站长应该都会用到数据库,那么phpmyadmin的使用也会是很多新手站长头大的问题,下面小编详细介绍一下phpmyadmin详细的图文使用教程. 方法/步骤 如何进入ph ...
- VM VirtualBox – Cannot register the hard disk
第一打开VirtualBox 文件夹,在地址栏输入cmd 第二, 仔细读下面 VBoxManage.exe internalcommands sethduuid "F:\Virtual ...
- 数论算法 剩余系相关 学习笔记 (基础回顾,(ex)CRT,(ex)lucas,(ex)BSGS,原根与指标入门,高次剩余,Miller_Rabin+Pollard_Rho)
注:转载本文须标明出处. 原文链接https://www.cnblogs.com/zhouzhendong/p/Number-theory.html 数论算法 剩余系相关 学习笔记 (基础回顾,(ex ...
- c#生成连续单号
bill.BillCode = GetBillCode("JH");//生成单号 if (bill.BillCode == "no") { bill.BillC ...
- JavaScript项目重构到底有多少坑要填要踩
看到代码的那一刻我惊呆了,就一个js文件,接近2000行的代码.这个还好,比这个行数多的我见的多了,这个还吓不到我.有哪些问题,一会再说. 因为从我接手的那一刻算起,几天后就要发新版本,我只要也只能调 ...