深入理解Java中的面向对象:多态与异常探究

一.多态的概念

●多态是同一个行为具有多个不同表现形式或形态的能力。

●多态就是同一个接口,使用不同的实例而执行不同操作。

●多态也就是同一个事件发生在不同的对象上产生不同的结果

例如:

现实中,比如我们按下 F1键这个动作:
(a)如果当前在 Flash 界面下弹出的就是 AS 3 的帮助文档

(b)如果当前在 Word 下弹出的就是 Word 帮助

(c)在 Windows 下弹出的就是 Windows 帮助和支持,

二.多态的优点

1.消除类型之间的耦合性

     简单来说,就是子类(或实现类)只管调用父类(或接口)里面的方法,至于如何修改实现,只需考虑本身就好

2.可替换性

     多态对已存在的代码具有可替换性

3.可扩充性

     多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作

4.接口性

     多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的

5.灵活性

     它在应用中体现了灵活多样的操作,提高了使用效率

6.简化性

     多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要

三.多态存在的三个必要条件

1.继承

abstract class ElectricAppliance{  
    abstract void form();  
}  
  
class Television extends ElectricAppliance{  
    public void form() {  
        System.out.println("扁平的长方体");  
    }  
    public void work() {  
        System.out.println("播放电视节目");  
    }  
}  
  
class Refrigerator extends ElectricAppliance{  
    public void form() {  
        System.out.println("高高的长方体");  
    }  
    public void work() {  
        System.out.println("存放食物");  
    }  
}

电视机类和冰箱类继承了电器抽象类

2.重写

abstract class ElectricAppliance{  
    abstract void form();  
}  
  
class Television extends ElectricAppliance{  
    public void form() {  
        System.out.println("扁平的长方体");  
    }  
    public void work() {  
        System.out.println("播放电视节目");  
    }  
}  
  
class Refrigerator extends ElectricAppliance{  
    public void form() {  
        System.out.println("很高的长方体");  
    }  
    public void work() {  
        System.out.println("存放食物");  
    }  
}

重写了电器类的form( )方法

3.父类引用指向子类对象

public class Test {
    public static void main(String[] args) {
      show(new Refrigerator ());   // 以 Refrigerator 对象调用 show 方法
      show(new Television ());  // 以 Television 对象调用 show 方法
                
      Animal a = new Television ();  // 向上转型  
      a.form();                          // 调用的是 Television  的 form
      Television c = (Television )a;             // 向下转型  
      c.work();                      // 调用的是 Television 的 work
  }  
            
    public static void show(Animal a)  {
      a.form();  
        // 类型判断
        if (a instanceof Refrigerator )  {              // 冰箱做的事情 
            Refrigerator c = (Refrigerator )a;  
            c.work();  
        } else if (a instanceof Television ) {   // 电视做的事情 
            Television c = (Television )a;  
            c.work();  
        }  
    }  
}

输出结果:

总结一下:

多态的三种实现方式

1.重写:根据上述例子我们可以看到,Television 类和Refigerator类重写了父类ElectricAppliance的方法,在父类方法的基础上,实现了子类特有的行为方式,体现了多态性

2.接口:生活中的接口最具代表性的就是插座,例如一个二接头的插头都能接在二孔插座中,因为这个是每个国家都有各自规定的接口规则,有可能到国外就不行,那是因为国外自己定义的接口类型

3.抽象类和抽象方法:抽象类除了不能被实例化对象之外,类的其他功能依然存在,成员变量,成员方法和构造方法的访问方式和普通类一样;由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用,那么有继承抽象方法就能被重写

三.异常

1.异常的概念

●异常是阻止当前方法或作用域继续执行的问题。

●从本质上来讲:Java异常是一个Java对象(继承Object),和一般的Java对象一样,封装了一些成员变量和操作,我们可以向操作一般Java对象那样去操作Java异常对象

●从代表的含义上来说:Java异常是一种错误情况,是程序不希望出现的现象,但是由于程序本身的设计逻辑和运行的环境等因素,出现异常的情况不可避免,Java虚拟机针对不同的异常情况定义了很多异常类,当jvm运行程序发现对应的异常时,将会向外面抛出异常

2.异常发生的因素

(1)用户操作错误:用户输入了非法数据

(2)程序错误:要打开的文件不存在

(3)物理错误:网络通信时连接中断,或者JVM内存溢出

3.异常的三种类型

(1)检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略

(2)运行时异常: 运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略

(3)错误:错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到的

4.常见的内置异常类

异常类型说明
Exception

异常层次结构的父类

ArithmeticException

算术错误情形,如以零作除数

ArrayIndexOutOfBoundsException

数组下标越界

NullPointerException

尝试访问 null 对象成员

ClassNotFoundException

不能加载所需的类

IllegalArgumentException

方法接收到非法参数

ClassCastException

对象强制类型转换出错

NumberFormatException

数字格式转换异常

5.捕获异常

try和catch

语法:

Ø使用 try 和 catch 关键字可以捕获异常,try/catch 代码块放在异常可能发生的地方 Øtry/catch代码块中的代码称为保护代码
ØCatch 语句包含要捕获异常类型的声明。当保护代码块中发生一个异常时,try 后面的 catch 块就会被检查。
Ø如果发生的异常包含在 catch 块中,异常会被传递到该 catch 块,这和传递一个参数到方法是一样。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值