HeadFirstJava——7_继承与多态
一、继承
1 概念
子类继承父类,即子类继承父类的方法和实例变量,子类可加入自己的方法和实例变量,也可以覆盖继承自父类的方法,但实例变量无法覆盖;
其中,覆盖指由子类重新定义继承下来的方法以改变或延伸此方法的行为;
子类是extends父类出来的;
举例:
public class Doctor{// 一个实例变量boolean worksAtHospital;// 一个方法void treatPatient(){}
}public class FamilyDoctor extends Doctor{//新加实例变量boolean makeHouseCalls;// 新加方法void giveAdvice(){}
}public class Sugeon extends Doctor{// 覆盖父类的方法void treatPatient(){}// 新加方法void makeIncision(){}
}
2 设计继承层次
a 找出具有共同属性和行为的对象
b 设计代表共同状态与行为的类
c 决定子类是否需要让某项行为(即方法)有特定的运作方式
d 通过寻找使用共同行为的子类来找出更多抽象化的机会
e 完成类的继承
3 注意
3.1 当调用对象引用的方法,Java虚拟机会调用到与该对象类型最接近的方法,即最低阶的方法;
3.2 若子类中继续引用父类的方法,再加上额外的行为,可在父类中设计所有子类都适用的功能实现,通过super关键字取用父类,如:
public void roam(){super.roam();// my own roam stuff
}
3.3 父类可通过存取权限决定子类是否能继承某些特定的成员,权限有private、default、protected、public,越往右限制程度越小,存取权限控制谁可以接触什么,如public类型的成员会被继承,private类型的成员不会被继承;
3.4 大部分继承深度不会超过两层;
3.5 只有内部类,没有私有类概念,即类不能标记为私有,但有三种方法防止某个类被作出子类,一是存取控制,不标记公有的类只能被同一个包的类作出子类;二是使用final修饰符,表示其是继承树的末端,不能被继承;三是让类只拥有private的构造程序;
二、多态
运用多态时,引用类型可以是实际对象类型的父类,参数和返回类型也可以是实际对象类型的父类;
通过多态,可编写出引进新型子类时也不必修改的程序;
Animal myDog = new Dog();class Vet{public void giveeShot(Animal a){a.makeNoise();}
}
class PetOwner{public void start(){Vet v = new Vet();Dog d = new Dog();Hippo h = new Hippo();v.giveShot(d); // 执行Dog的makeNiose()v.giveShot(h); // 执行Hippo的makeNiose()}
}
三、覆盖
1 概念
若只想防止特定的方法被覆盖,可将该方法标识上final修饰符;将整个类标识成final,表示没有任何的方法可以被覆盖;
2 覆盖规则
参数必须要一样,且返回类型必须要兼容;
不能降低方法的存取权限;
四、方法的重载
1 概念
重载是两个方法的名称相同,但参数不同,故重载与覆盖没有关系;
2 重载规则
返回类型可以不同;
不能只改变返回类型;
可更改存取权限;
public class Overloads{String uniqueID;public int addNums(int a, int b){return a + b;}public double addNums(double a, double b){return a + b;}public void setUniqueID(String theID){uniqueID = theID;}public void setUniqueID(int ssNumber){String numString = "" + ssNumber;setUnique(numString);}
}
HeadFirstJava——7_继承与多态相关推荐
- Go 学习笔记(36)— 基于Go方法的面向对象(封装、继承、多态)
Go 面向对象编程的三大特性:封装.继承和多态. 封装:隐藏对象的属性和实现细节,仅对外提供公共访问方式 继承:使得子类具有父类的属性和方法或者重新定义.追加属性和方法等 多态:不同对象中同种行为的不 ...
- Python中的继承和多态
本文以生活中的基础现象为切入点,主要介绍了Python基础中继承和多态,包括单继承.多继承的语法.多态常见的 "鸭子类型". 以及如何重写父类的方法都做了详细的讲解. 一.继承的介 ...
- python 继承和多态
python 继承和多态 在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类.父类或超类(Ba ...
- java 封装 继承 堕胎_JAVA封装、继承、多态
封装 1.概念: 将类的某些信息隐藏在类的内部,不允许外部程序访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问. 2.好处: a.只能通过规定的方法访问数据 b.隐藏类的实例细节,方便修改和实 ...
- Python面对对象编程——结合面试谈谈封装、继承、多态,相关习题详解
1.面向对象的三大特征 封装:属性和方法放到类内部,通过对象访问属性或者方法,隐藏功能的实现细节.当然还可以设置访问权限; 继承:子类需要复用父类里面的属性或者方法,当然子类还可以提供自己的属性和方法 ...
- Java基础-OOP特性之封装、继承、多态、抽象
为什么80%的码农都做不了架构师?>>> //要习惯将程序(功能.代码)模块化 //OOP四大特性:封装.继承.多态.抽象 //OOP的核心:封装一个类,把数据抽象出来,再把方 ...
- 第10章 接口、继承与多态----抽象类和接口
一.抽象类 在解决实际问题时,一般将父类定义为抽象类,需要使用这个父类进行继承与多态处理.回想继承和多态原理,继承树中越是在上方的类越抽象,如:鸽子类继承鸟类.鸟类继承动物类等.在多态机制中,并不需要 ...
- Java进阶篇(一)——接口、继承与多态
前几篇是Java的入门篇,主要是了解一下Java语言的相关知识,从本篇开始是Java的进阶篇,这部分内容可以帮助大家用Java开发一些小型应用程序,或者一些小游戏等等. 本篇的主题是接口.继承与多态, ...
- java继承和多态的实验报告_JAVA,继承和多态实验报告
实验项目名称 : 继承和多态 ( 所属课程 : Java 语言程序设计 ) 院 系: 专业班级: 姓 名: 学号: 实验地点: 指导老师: 本实验项目成绩: 教师签字: 日期: 1.实验目的 (1)掌 ...
- 封装 继承 多态_Java基础知识——封装、继承、多态
1 基本概括 2 详解 封装: 是将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问 封装的优点:只能通过规定的方式来访问数据:隐藏类的实现细节: ...
最新文章
- 目标检测中特征融合技术(YOLO v4)(下)
- 【转】触屏手机电话拨打链接
- 新手探索NLP(六)——全文检索
- 怎么关闭eureka的服务_SpringCloud微服务踩坑系列之二
- 【深度学习】sigmoid - 二次代价函数 - 交叉熵 - logistic回归 - softmax
- nginx集群tomcat,session共享问题
- Ubuntu 14.04 修改时区
- OpenCV_02 图像的基本操作:图像IO+绘制图形+像素点+属性+图像通道+色彩空间的改变
- 想学好C语言?先把基础打好再说吧!
- 华为拿百亿资金给员工分红,预计每股1.58元
- 纵横安卓刷机界的CM,如今转行做无人车了,还获得了加州路测许可
- 国密SM2算法陷入安全危机? 假!SM2仍然安全
- vue生产环境使用localhost请求端口号不是自己设置的?来试试这个
- Word控件Spire.Doc 转换教程(三):如何将 Word 转换为 PDF
- 第三阶段应用层——1.12 数码相册—interval_page设置时间间隔界面的显存管理、页面规划、输入控制
- 计算机资源管理窗口,资源管理器怎么打开,教您打开电脑资源管理器
- u3d canvas设置
- java中的迭代是什么意思_JAVA里的 迭代 具体是指什么意思
- 全景视角下的世界探索——三维全景地图
- BI神器Power Query(15)-- PQ制作时间维度表(4)