继承与多态

3.1 包

如果在程序中没有声明包,类将被存放在default的包中,default的包没有名称,不建议采用default包的形式,建议开发人员按照业务的需要创建用户自定义包。

语法:package〈包名〉

注意:声明一个包的语句必须写在类中的第一行

3.1.2 包的导入
如果要使用java中存在的包,可以在程序中使用import语句导入包,在程序中导入包的格式如下:

语法:import〈包名〉.〈类名〉

如果要导入一个包中的多个类,可以使用"*"表示包中所有的类,例如:

import java.util.*;//导入Java.util包中所有的类
import java.util.ArrayList;//java.util包中的ArrayList类

3.1.3 包的访问权限
一个包中具有缺省访问权限的成员只能在同一个包中被引用,如果一个包中的成员的访问权限为public,那么这些成员才能被其他包中的类所引用。

1.Public访问权限成员(类、属性和方法统称)
public成员可以被其他包中的类访问,public类中的protected成员可以被由它派生的在其他包中的子类访问。

2 .缺省访问成员权限成员
缺省访问权限成员,只能被同一个包中的类访问,不被其他包中的类访问。

3.2 继承

3.2.1 继承的概述
继承是面向对象程序设计的一个重要特征,它是通过继承原有类派生出的子类进而构造出更为复杂的子类。子类既有新定义的行为特征。在java中继承 可以在现有类的基础上进行功能的扩展,这样能够更加快速地开发出新类,使新类不仅可以复用当前类的特征和行为,而且还可以定义自己的特征和行为。通过继承可大幅度地提高代码的复用性,减少代码量,便于程序后期的维护。

[修饰符]class 子类名[extends 父类名]{//类定义部分
}

3.2.2 继承的实现
实例:(1) 创建父类武器类(weapon),代码如下:

public class Weapon {String name;//武器值int attackValue;//攻击值//构造方法public Weapon(String name,int attackValue) {this.name=name;this.attackValue=attackValue;}//攻击方法public void attack() {System.out.println("武器名:"+name+"\t攻击值:"+attackValue);}
}

(2)创建子类圣剑类(sword),代码如下:

public class Sword extends Weapon{public Sword(String name,int attackValue) {super(name,attackValue);}}

(3)创建子类长矛类(spear),代码如下:

public class Spear extends Weapon {public Spear(String name,int attackValue){super(name,attackValue);}}

(4)创建测试类(ExtendsText),代码如下:

public class Mytest1 {public static void main(String[] args) {Sword sword=new Sword("剑圣",300);sword.attack();Spear spear=new Spear("长矛",280);spear.attack();}}

(5)运行结果如下:

3.3 重载和重写

3.3.1 重载
方法的重载。是指一个类中的多个方法可以具有相同的方法名,单着写方法的参数必须不同,在执行时可以根据其参数个数与数据类型来判断要调用此方法是哪一种操作。这些同名方法可按程序的需要自行定义。使用方法重载时,需要注意以下几点:
(1)同一个类中方法名相同,参数列表不同。
(2)返回值类型不能用于区分方法的重载。

3.3.2 重写
子类扩展了父类,子类是一个特殊的父类。子类以父类为基础,额外增加新的属性和方法。但有一种情况除外:子类需要重写父类的方法

实例:(1)创建父类Bird,代码如下:

public class Bird {//Bird类的fly()方法public void fly() {System.out.println("我在蓝天白云间自由地飞翔...");}}

(2)创建子类Ostrich,代码如下:

public class Ostrich {public void fly() {System.out.println("我只能在陆地上拍拍翅膀...");}public void prey() {//在捕食中调用fly()方法fly();System.out.println("执行捕食方法");}public static void main(String[] args) {//创建Ostrich对象Ostrich or=new Ostrich();or.prey();//调用ostrich对象的prey()方法}}

(3)运行结果如下:

3.3.3 重写覆盖问题
子类包含与父类同名的方法,该方法被称为方法重写,也称为方法覆盖。方法覆盖使子类“隐藏”了父类中的方法,如果需要访问被子类覆盖的方法,则可使用super关键字指明调用父类被覆盖的实例方法。

3.4 多态

3.4.1多态应用
多态是指同一操作作用于不同的对象,可以有不同的解释,以致产生不同的执行结果,在编译时可以通过父类的引用指向子类对象,而在运行时,则通过父类所指向的子类对象,调用子类中重写父类的方法。

实例:(1)创建父类人物Figure,代码如下:

public class Figure {protected String name;public void attack() {//此处不进行具体的攻击操作,不同职业的英雄攻击方式不同}public void run() {System.out.println("在奔跑");}
}

(2)创建子类战士Warrior,该类继承父类Figure,代码如下:

public class Warrior extends Figure {//重写父类的attack()方法public void attack() {System.out.println(this.name+"正在物理攻击....");}}

(3)创建子类法师Masster,该类继承父类Figure,代码如下:

public class Master extends Figure{//重写父类attack()方法public void attack() {System.out.println(this.name+"正在魔法攻击...");}public static void main(String[] args) {Figure master=new Master();master.name="恶魔巫师";Figure warrior=new Warrior();warrior.name="撼地神牛";master.attack();warrior.attack();}
}

(4)运行结果如下:

3.4.2 引用变量的强制类型转换
编写java程序时,引用变量只能调用其编译时类型的方法,而不能调用运行时类型的方法,即使实际所运用的对象确实包含该方法,如果需要让引用变量调用运行时类型的方法,则必须将其强制类型转换为运行时类型,强制类型转换徐借助于类型转换运算符。强制类型转换是需要注意以下两点:

(1)基本类型之间的转换只能在数值类型之间进行,此处的数值类型包括整数型、字符型和浮点型。但数值类型和布尔之间不能进行转换。
(2)引用类型之间的转换只能在具有继陈关系的两个;类型之间进行,如果是两个没有任何继承关系的类型,则无需转换,否则会出现编译错误。

3.4.3 instanceof运算符
instanceof运算符的前一个操作数通常是一个引用类型变量,后一个操作数通常是一个类,它用于判断运算符前面的引用变量是否是运算符后面的类型或子类类型的实例。如果条件成立,则返回ture,否则返回false。

java面向对象程序设计-继承与多态相关推荐

  1. Java面向对象程序设计三大支柱--多态

    面向对象程序设计的三大支柱是封装.继承和多态.本篇文章主要讲述多态的相关知识. 一.概述 1.定义 多态意味着父类的变化可以指向子类对象:它是同一行为具有不同表现形式或形态的能力. ps:一个类实际定 ...

  2. Java面向对象之继承和多态

    1.代码块 (1)关于代码块的概述:用{}括起来的代码,统称为代码; (2) 根据其位置以及声明不同:分为以下       1) 局部代码块: 在main()里面,给变量限定它的生命周期 public ...

  3. JAVA面向对象程序设计-FeiGe快递系统-继承II

    JAVA面向对象程序设计-FeiGe快递系统-继承 package com.caishui.model;public class TestSon {public static void main(St ...

  4. 20155328 《Java程序设计》 实验二(Java面向对象程序设计) 实验报告

    20155328 <Java程序设计> 实验二(Java面向对象程序设计) 实验报告 单元测试 一.单元测试和TDD 编程时需理清思路,将编程需求等想好,再开始编.此部分可用伪代码实现. ...

  5. 20175333曹雅坤 实验二 Java面向对象程序设计

    实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...

  6. 20145122《Java面向对象程序设计》实验二实验报告

    实验名称: Java面向对象程序设计 实验内容: 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 PSP时间 步骤 ...

  7. Java第二次实验报告——Java面向对象程序设计

    北京电子科技学院(BESTI) 实    验    报    告 课程名称:java程序设计实验      班级:1352         姓名:洪韶武      学号:20135219 成绩:   ...

  8. java程序面向对象show,20165309 实验二 Java面向对象程序设计

    2017-2018-2 20165309实验二<Java面向对象程序设计>实验报告 一.实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初 ...

  9. java构成对象的三要素_20155237 《JAVA程序设计》实验二(JAVA面向对象程序设计)实验报告...

    20155237 <JAVA程序设计>实验二(JAVA面向对象程序设计)实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S ...

  10. 2016-2017-2 20155117实验二《Java面向对象程序设计》实验报告

    实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验要求 1.参考Intellj IDEA 简易教程 提交 ...

最新文章

  1. seaborn使用violinplot函数可视化小提琴图、使用stripplot函数添加抖动数据点(jittered points)、显示数据的稠密程度
  2. Codeforces Round #476 (Div. 2) A. Paper Airplanes
  3. websocket receive方法内 有循环怎么退出_认识HTML5的WebSocket
  4. 破格晋升!一批高校教师脱颖而出
  5. 帝国CMS7.5仿金色财经整站源码+手机端+会员中心+投稿-财经综合门户
  6. python自制有声小说
  7. myisam读取速度为什么比innodb快_为什么MySQL用B+树做索引
  8. VALSE学习(十一):弱监督图像语义分割
  9. office2010下压缩图片没有效果解决方案
  10. CS106 错误拒绝访问
  11. 2018全国计算机二级c语言题库,全国计算机二级c语言题库试题及答案
  12. MedicineCare-可行性分析
  13. java导出文件excle报错Failed to read zip entry source
  14. 怎样写商业计划书 【转载】
  15. 服务器开机显示检查电缆,电脑开机显示无VGA电缆是怎么回事,求答!
  16. 修改IDEA默认运行内存
  17. pdf文件去除无用内容和链接
  18. 基于随机森林模型的葡萄酒品质分析
  19. Unity集成穿山甲后打包报错android:networkSecurityConfig , Picked up JAVA_TOOL_OPTIONS:-Dfile.encoding=UTF-8
  20. 视达配色教程8 蓝色的性格是什么样的

热门文章

  1. 2020 ArXiv之跨模态ReID:Parameters Sharing Exploration and Hetero-Center based Triplet Loss for Visible-T
  2. 个人信息“裸奔”?超七成网民遭泄露
  3. 实时用户在线人数统计(三):hyperloglog
  4. 实验课题——最全手机通信录实现版本(【含注释】848行代码)!!!(包括模糊查询、分类查找、模拟拨号、qsort函数实现排序、文件存储、防误触等功能)
  5. IE恶意修改之终极解决方案
  6. 计算机考研复试数据库常见面试题
  7. android盒子分辨率,有趣发现:盒子分辨率需要正确设置
  8. 深入了解基于RTMP数据传输协议的实时流媒体技术(图解过程)一看就会【建议新手收藏】
  9. TCP 如何保证可靠性
  10. Spring Boot web开发(未完待续)