Java学习笔记 07 接口、继承与多态
一、类的继承
- 继承的好处
>>使整个程序架构具有一定的弹性,在程序中复用一些已经定义完善的类不仅可以减少软件开发周期,也可以提高软件的可维护性和可扩展性
- 继承的基本思想
>>基于某个父类的扩展,制定出一个新的子类,子类可以继承父类原有的属性和方法,也可以增加原来父类所不具备的属性和方法,或者直接重写父类中的某些方法
- 关键字
>>在java中使用extends关键字来标识两个类的继承关系
- 重写与重构
>>继承不只是扩展父类的功能,还可以重写父类的成员方法。重写就是在子类中将父类的成员方法的名称保留,重写成员方法的实现内容,更改成员方法的存储权限,或是修改成员方法的返回值类型。修改成员方法的返回值类型时需要遵守一个原则,即重写的返回值类型必须是父类中同一方法返回值类型的子类
>>在继承中还有一种特殊的重写方式,子类与父类的成员方法返回值、方法名称、参数类型及个数完全相同,唯一不同的是方法实现内容,这种特殊的重写方式称为重构
- 注意
>>在子类中可以连同初始化父类构造方法来完成子类初始化操作,既可以在子类的构造方法中使用super()语句调用父类的构造方法,也可以在子类中使用super关键字调用父类的成员方法等。但是子类没有权限调用父类中被修饰为private的方法,只可以调用父类中修饰为public或protected的成员方法
>>在Java中一切都以对象的形式进行处理,在继承的机制中,创建一个子类对象,将包含一个父类子对象,这个对象与父类创建的对象是一样的。两者的区别在于后者来自外部,前者来自子类对象的内部。当实例化子类对象时,父类对象也相应的被实例化。在实例化子类对象时,Java编译器辉仔子类的构造方法中自动调用父类的无参构造方法。在实例化子类对象时,会优先执行最高的父类无参构造方法,但不会调用父类的有参构造方法,也只能依赖于super关键字显式的调用父类的构造方法
>>如果使用finalize()方法对对象进行清理,需要确保子类的finalize()方法的最后一个动作是调用父类的finalize()方法,以保证当垃圾回收对象占用内存时,对象的所有部分都能被正常终止
二、Object类
- 概述
>>在Java中,所有的类都直接或间接继承了java.lang.Object类。Object类是比较特殊的类,它是所有类的父类,是Java类层中的最高层类
>>在Object类中主要包括clone()、finalize()、equals()、toString()等方法,由于所有的类都是Object类的子类,所以任何类都可以重写Object类中的方法
>>Object类中的getClass()、notify()、notifyAll()、wait()等方法不能被重写,因为这些方法被定义为final类型
- getClass()方法
>>getClass()方法是Object类定义的方法,可以返回对象执行时的Class实例,然后使用此实例调用getName()方法可以取得类的名称
>>语法:getClass().getName()
- toString()方法
>>toString()方法的功能是将一个对象返回为字符串格式,返回值为String实例
>>通常重写toString()方法,为对象提供一个特定的输出模式。当这个类转换为字符串或字符串连接时,会自动调用重写的toString()方法
- equals()方法
>>在Java自带的类中使用equals()方法时,会比较两个对象的内容
>>在自定义类中使用equals()方法,会默认使用“==”运算符比较两个对象的引用地址,而不是比较两个对象的内容,所以需要在自定义类中重写equals()方法
三、对象类型的转换
- 向上转型
>>将子类对象看做父类的对象被称为“向上转型”
>>由于向上转型是从一个较具体的类到较抽象的类的转换,所以总是安全的
- 向下转型
>>越是具体的对象具有的特性越多,越抽象的对象具有的特性越少。在做向下转型操作时,将特定范围小的对象转换为特性范围大的对象肯定会出现问题。将父类对象强制转换为某个子类对象,这种方式称谓显式类型转换
>>当在程序中使用向下转型技术时,必须使用显式转换,向编译器指明将父类对象转换为哪一种类型的子类对象
四、instanceof操作符
- 概述
>>使用instanceof操作符用于判断父类对象是否为子类对象的实例
>>语法:myobject instanceof ExampleClass
>>instanceof操作符的表达式返回值为布尔值,如果返回值为true,说明对象为目标类的实例对象;反之,则不是
>>instanceof是Java语言的关键字,在Java语言中的关键字都为小写
五、方法的重载
- 定义
>>重载指的是在同一个类中允许同时存在一个以上的同名方法,只要这些方法的参数个数或类型不同即可
- 可变参数
>>在参数列表中使用“...”形式来定义可变参数
>>可变参数实际上是一个数组,编译器会将(int...a)这种形式看做(int[]a)
六、多态
- 作用
>>可以使程序具有良好的扩展性,并可以对所有类对象进行通用的处理。
七、抽象类与接口
- 抽象类
>>使用abstract关键字定义的类称为抽象类,用这个关键字定义的方法称为抽象方法
>>在解决实际问题时,一般将父类定义为抽象类,需要使用这个父类进行继承与多态处理。继承树中越是在上方的类越抽象。在多态机制中,并不需要将父类初始化对象,我们需要的只是子类对象。在Java语言中设置抽象类不可以实例化对象,因为图形类不能抽象出任何一种具体图形,但它的子类却可以
- 接口
>>接口是抽象类的延伸,可以将他看作是纯粹的抽象类,接口中所有的方法都没有方法体
>>接口使用interface关键字进行定义,语法如下
public interface drawTest{ //public关键字仅限用于接口在与其同名的文件中被定义
....() //接口内的方法,省略abstract关键字
}
>>接口使用implements关键字进行实现
public class ClassName extends ParentClassName implements drawTest{
...//实现
}
>>在接口中定义的方法必须被定义为public或abstract形式,其他修饰权限不被Java编译器认可,即使不声明该方法为public形式,编译器也默认是public
>>在接口中定义的任何字段都自动是static和final的
- 接口与继承
>>在Java中不允许多继承,但使用接口可以实现多继承。一个类可以同时实现多个借口,这样可以将所有需要继承的接口放置在implements关键字后并使用逗号隔开,但这可能会在一个类中产生庞大的代码量,因为继承一个接口时需要实现接口中的所有方法
interface intf1{ } interface intf2 extends intf1{ }
Java学习笔记 07 接口、继承与多态的更多相关文章
- Java学习笔记——封装、继承和多态
先说说封装: 用new 一条狗来举个例子: public class Dog { //私有化字段 private String name; private int age; //无参构造 Dog(){ ...
- java学习笔记6--类的继承、Object类
接着前面的学习: java学习笔记5--类的方法 java学习笔记4--类与对象的基本概念(2) java学习笔记3--类与对象的基本概念(1) java学习笔记2--数据类型.数组 java学习笔记 ...
- 《java JDK7 学习笔记》之继承与多态
1.面向对象中,子类继承父类,避免重复的行为定义,不过并非为了避免重复定义行为就使用继承.应该正确判断使用继承的时机及继承之后灵活的运用多态,才是学习继承时的重点. 2.程序代码重复在程序设计上,就是 ...
- Java 学习笔记(7)——接口与多态
上一篇说了Java面向对象中的继承关系,在继承中说到:调用对象中的成员变量时,根据引用类型来决定调用谁,而调用成员方法时由于多态的存在,具体调用谁的方法需要根据new出来的对象决定,这篇主要描述的是J ...
- Java学习笔记之接口
一.接口的概念与定义 首先考虑一个简单的接口的定义: public interface Output { int MAX_LINE = 40; void out(); void getData(Str ...
- (C/C++学习笔记) 十八. 继承和多态
十八. 继承和多态 ● 继承的概念 继承(inheritance): 以旧类为基础创建新类, 新类包含了旧类的数据成员和成员函数(除了构造函数和析构函数), 并且可以派生类中定义新成员. 形式: cl ...
- Java学习笔记 抽象类 接口 多态
instanceof 对象名 instanceof 类名 该对象是否属于该类 Animal animal = new Dog(); if(animal instanceof Dog){ Dog d = ...
- 1)Java学习笔记:接口和抽象类的异同
Java接口和抽象类很像,他们有哪些相同点和异同点呢,下面我们做一个小结 相同 ① 都不能被实例化,都位于继承树的顶端,用于被实现或者继承 ② 都可以包含抽象方法,实现接口或者继承抽象类的普通子类都必 ...
- Java学习笔记之——接口
接口(interface)和抽象类 为何要定义接口?------>实现不同的方法 Java的设计思想是单继承和多实现 类:属性和方法的集合,方法围绕着属性转,可以理解为自定义的类型 接口:与类是 ...
随机推荐
- iOS开发中多线程间关于锁的使用
为什么需要使用锁,当然熟悉多线程的你,自然不会感到陌生. 那你在代码中是否很好的使用了锁的机制呢?你又知道几种实现锁的方法呢? main.m 1 int main(int argc, const ch ...
- oracle合并版本
1) 添加字段,并自增 第一步:alter table TOWN add ID int 第二步:Update TOWN set id=rownum; Commit; 2) 更新表(另一张表) ...
- WCF在tcp通道下启用httpget
关于tcp通道下,启用httpget,必须启用一个http的基地址,如果要启用元数据交换,host中必须开启服务描述. //01 create host Uri tcpBaseAddress = ne ...
- Camstar Portal modeling user guid --设置本地时间
登陆--studio --portal settings -- timezone settings 里面有EST 和EDT两个时间. 现在要设置为北京时间(08:00) 原文: Localizatio ...
- 错误的CPU时间片大小概念
1.错误的CPU时间片大小概念:http://blog.csdn.net/blue_morning/article/details/7843581 2.时间片:http://baike.baidu.c ...
- 使用UDP协议与韩国OACIS压机通讯
最近一个项目需要发送SN给OACIS, 研究了一下OACIS文档, 从文档中可以看出,传输协议只能使用UDP,切传输命令为>SN1; + SN + ; + LF LF的定义在Linux和Uni ...
- eclipse项目自动发布到tomcat目录,缺文件。
eclipse项目自动发布到tomcat目录,缺文件. 解决方案: 项目--Properties-->Deployment Assembly-->Add--> Folder Add- ...
- MSSQLSERVER服务无法启动的解决方案
MSSQLSERVER服务无法启动的解决方案 有时候sqlserver无法启动了,原因是mssqlserver服务没有启动,当你手动启动时,又出现服务无法响应的可恶错误提示... 笔者“有幸”遇到了, ...
- JDBC 工具类
在Java编程过程中 我们需要连接数据库 所以数据库的连接和增删改查操作是非常基本的操作同时又非常的重要.同时在JDBC编程中 ,有很多的方法如更新个查找操作,我们可以对其进行封装,提高我们编码的效率 ...
- JS之BOM、客户端检测和DOM
这是第八章到第十二章的内容,粗略浏览过一遍. 一.BOM 浏览器对象模型.包括了window.location.navigator.screen和history对象. window:核心对象 1.JS ...