欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JAVA面对对象程序设计:第三章 继承与多态

程序员文章站 2022-07-16 09:28:08
...

 3.1 包

3.1.1 自定义包

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

语法:

package <包名>

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

3.1.2 包的导入

如果要使用Java中存在的包,可以在程序中使用import语句导入包。

语句:

import <包名>.<类名>

如果要导入一个包中的多个类,可以使用“ * ”表示包中所有的类。

3.2 继承

3.2.1 继承的概述

继承是面对对象程序设计的一个重要特征,它是通过继承原有类派生出来的子类进而构造出更复杂的子类。子类即有新定义的行为特征,又继承了原有类的行为特征。

Java的继承是使用extends关键字实现,实现继承的类称为子类,被继承的类被称为父类,也被称为基类,超类。

java的继承语法格式如下:

[修饰符] class 子类名 [extends 父类名]{ }

在使用继承的特性时,需要注意的是,子类可以继承父类中访问权限为public,protected,default的成员变量和方法。

!注意:Java中的继承为单继承,即一个子类只能有一个直接的父亲。

3.3 重载和重写

3.3.1 重载

方法的重载,是指一个类的多个方法可以具有相同的方法名,但这些方法的参数必须不同,在执行时可以通过根据其参数个数与类型来判断要调用此方法是哪一种操作。这些同名方法可按程序的需要自定义。

(1)同一个类中方法名相同,参数列表不同。

(2)返回值类型不能用于区分方法的重载。

提醒:构造方法也可以实现方法的重载。

3.3.2 重写

子类扩展了父亲,子类是一个特殊的父亲。子类一父类为基础,额外增加新的属性和方法。

但有一种情况除外:子类需要重写父类的方法。

方法的重写要遵循"两同两小一大"规则。"两同"即方法名相同,形参列表相同;"两小"是指子类返回值类型应比父类方法返回值类型范围更小或相等,子类方法声明抛出的异常类型应比父类方法声明抛出的异常类型范围更小或相等;''一大"是指子类的访问权限应比父类方法的访问权限更大或相等。

3.3.3 重写覆盖问题

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

语法:

super.对象名

3.4 多态

多态是指同一操作作用于不同的对象,可以有不同的解释,以至产生不同的执行结果。其实就是同一种操作面对不同的对象得到的结果也会不同。

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

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

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

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

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

public class Master extends Figure{
      //重写父类的attacl()方法
     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();
     }
}

至于输出结果则是:

恶魔小法正在魔法攻击......

亚索正在物理攻击.....

3.4.2 引用变量的强制类型转换

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

3.4.3 instanceof 运算符

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

instanceof和(type)是Java提供的两个相关的运算符,通常先使用instanceof判断一个对象是否可以强制类型转换,然后再使用(type)运算符进行强制类型转换,从而保证程序不会出现错误。

说明:(type)运算符为前置类型转换运算符,type表示将要转换的类型。

!注意: 使用instanceof 运算符是,需要注意instanceof 运算符前面操作数的编译时,类型要么与后面的类相同,要么与后面的类具有父子继承关系,否则会引起编译错误。

好了,本遍文章到此结束

JAVA面对对象程序设计:第三章 继承与多态

 

 

相关标签: java