Java 继承与多态

Posted 果子儿酱

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 继承与多态相关的知识,希望对你有一定的参考价值。

1.包
在生活中,保存文档时会经常使用文件夹,把不同类型的文档归类,然后分放到不同的文件夹中,便于管理和查找。在计算机中保存电子文档也不例外,如我们看到的Windos系统中的树形目录结构。在复杂的文件系统中,文件分门别类地存储在不同的文件夹中,解决了文件同名冲突的问题。事实上,在编写复杂程序的过程中,也会遇到 同样的问题。Java 以类组织程序,开发一一个大型的工程需要成百 上千个类。如果要求开发人员确保自己所用的类名不与其他开发人员选择的类名相冲突,这是非常困难的。例如,开发人员定义-一个Sort类,使用冒泡的方法排序,但另一个开发人员也需要定义-个Sort类,就会产生类名冲突,而Java就提供了包对类进行分门别类的管理。 类似于在文件夹中存储文件,Java 的类文件可以存储在不同的包中。
包是类的逻辑组织形式。在程序中可以声明类所在的包。同一个包中的类名不能重复。通过包可以对类的访问权限进行控制。此外,包是有层次结构的,即一个包中可以包含若干个子包。
除Java提供的用于程序开发的系统类被存放在各种系统包之外,开发人员也可以创建自定义包。
1. 自定义包
如果在程序中没有声明包,类将被存放在default的包中,default 的包没有名称。不建议采用default包的形式,建议开发人员按照业务的需要创建用户自定义包。在程序中声明包的语法如下:
国语法 package <包名: >
使用Eclipse新建一个 Tree 类,将该类存放到com.java.oriented.dato.scene包中,在Hero类中使用Tree类,由于Hero类与Tree类不在同一个包中,所以要通过import语句导入包com.java.oriented.dato.scene.具体
package com.java.oriented. dota. scene;//Tree类
public class Tree 
public void "clear()
//具体业务逻辑
/1英雄类
package com.java.oriented.dota .figure;
preriree类Hero类不在同一个包中,所以需要使用import关键字导入包 import com.java oriented dota.scene.Tree;
public class Hero 
// 英雄吃树方法
puBlic void eatTree(Tree tree)l
调用树对象的clear()方法,吃掉的树在地图中消失
tree .clear();
3.包的访问权限
一个包中具有缺省访问权限的成员只能在同一个包中被引用,如果一个包中的成员的访问权限为public, 那么这些成员才能被其他包中的类所引用。
1.public访问权限成员(类、属性和方法统称)
public成员可以被其他包中的类访问,public 类中的protected成员可以被由它派生的在其他包中的子类访问。

2.缺省访问权限成员
缺省访问权限成员,只能被同一个包中的类访问,不被其他包中的类访问。
如果去掉示例3.2中Tree类的clear()方法的访问修饰符public,此时Hero类中就会显示错误提示
需求说明
在com.java包中创建一个学生类 (Student),在com.test包中创建测试类Test并输出学生信息。实现思路
(1)创建com.java包,在该包内创建一个学生 类( Student),该类中有两个public 类型的属性,姓名(name)和年龄(age)。
(2)在com.test包内创建Test类,并导入Student类所在包,在主方法中通过构造方法实例化Student对象,通过“实例名.属性”输出信息。
(3)将Student类中的age属性分别修改设置为protected、缺省修饰符和private这3种不同的访问级别,观察结果并思考原因。
参考代码如下:
public class Test 
public static void main(Stringll args) 
Student stu = new Student(" 张三丰”,19); System. out. printin( stu.name+"t" + stu.age)i
4.继承
1.继承的概述
继承是面向对象程序设计的一个重要特征,它是通过继承原有类派生出的子类进而构造出更为复杂的子类。子类既有新定义的行为特征,又继承了原有类的行为特征。
在这个五彩缤纷的世界中,继承的案例随处可见。老虎、狮子、熊猫、狼,它们都具有动物的基本特征和行为,所以它们都是动物;小汽车、货车、公共汽车,它们都具有车的基本特征和行为,所以它们都被称为车。 原上所还。以动物现动2,。西老牌明子用路塑思动物的一中。 可以称其为子类:将平为发天,而快车小汽车、公共汽车是车的一一种,可以称其为子类,如图3.3所示。
2. 继承的实现
有圣剑(Sword)、长矛(Spear)两个武器类,其要求如下:
Sword类的属性:武器名(name)、攻击值( attackValue) ;方法:攻击(attack) 。 Spear类的属性:武器名(name)、攻击值(attackValue) ;方法:攻击(attack)。分析下面的程序代码:
(1)创建Sword类,代码如下:
public class Sword  String name; int attackValue;
//武器名//攻击值
//构造方法
public Sword(String name, int attackValue)   this.name = name;
this . attackValue = attackValue;
//攻击方法
public void attack()
System. out printin'武器名:'+name+" "\\t"+"攻击值:" +attackValue);
(2)创建Spear类,代码如下:
public class Spear  String name; int attackValue;
//武器名//攻击值
//构造方法
public Spear(String name, int attackValue)   this.name = name;
this. attackValue = attackValue;
//攻击方法
public void attack()
System.out.printIn("武器名: +name+"\\t"+"攻击值:”+attackValue);
上面的两个类中存在大量的重复代码,不能实现代码的复用,同时不易于程序的扩展。如果将每个类中码抽取出来,建立一一个公共类,提供给其他类复用,这样会大量减少重复代码,实现代码的复用。以下:
public class Weapon
String name;// ĩő68 int attackValue;
public Weapon(String name, int attackValue)
System. out. printIn("--执行武器父类Weapon的构造方法--");  this.name = name;
this.attackValue = attackValue;
public void attack(l 
System.out.println(" E88 8 :" +name+"lt"+" Vđa :" +attackValue);
(2)创建子类圣剑类(Sword),代码如下:
public class Sword extends Weaponl
public Sword(String name, int attackValue) ( super(name, attackValue);
(3)创建子类长矛类( Spear),代码如下:
public class Spear extends Weaponl
public Spear(String name,int attackValue) l super(name, attackValue);
(3)创建子类长矛类(Spear) ,代码如下:
public class Spear extends Weapon(
public Spear(String name,int attackValue) l super(name, attackValue);
(4)创建测试类( ExtendsTest) ,代码如下:
public class ExtendsTest (
public static void main(Stringll args)l
Sword word = new Sword" EûlJ ",300); word. attack();
Spear spear = new Spear(" Kš ",250); spear. attack();

 

以上是关于Java 继承与多态的主要内容,如果未能解决你的问题,请参考以下文章

Java中 接口是如何实现多态的特性的

java知识点---第二部分

Java基础复习---第三章

12:面向对象三大特性(封装继承多态)之继承

第六章 初始继承和多态

java之多态详解