09 多态、异常、抽象类

一、多态

1 概念:

一个类的不同状态。屏蔽了子类的不同点。
一个实体在不同时间下表现得不同状态,同一个对象,在不同时间时代表的是不同的对象,拥有的属性和功能不同。
对象变量是多态的,他可以表示父对象也可以表示子对象。

2 特点:

  1. 多态前提:
    - 发生类的继承
    - 子类重写父类得对象
  2. 常见结构形式:
    Father  a = new Son();
    // 父类引用指向子类对象
    
  3. 编译看左边,执行看右边
      编译是将.java的源文件编译成为.class的字节码文件
      执行是.class的字节码文件在虚拟机上运行。
      虚拟机通过方法表(method table)及方法的动态绑定规则(虚拟机会根据隐式参数的类型,选择最合适的方法实现来执行)确定方法的执行。

3 多态的应用

1.在多态中将子类的对象,看作父类的对象,除了子类重写的方法以外,所有的资源只能使用父类的。
2.执行时,使用的方法时子类的,使用的变量时父类的
3.方法只能使用父类声明的,自己独有的方法无法执行。
4 .方法声明式父类的,执行的方法实现式子类的

4 拓展 java中的方法调用

方法调用过程:
1.编译器查看对象声明与方法名。确定该类及其父类中所有可调用的同名方法。
2.编译器根据传递的参数类型和位置。确定调用哪个方法(确定方法声明)。
3.private,final,static修饰的方法是静态绑定(static binding)
4.其他方法是动态绑定:虚拟机根据隐式参数的实际类型选择合适的方法执行。
顺序是隐式参数的实际类型方法然后其父类的方法。
重载解析(overloading resolvtion):Java中对于方法名相同,参数不同的方方法调用过程。具体过程是编译器根据你程序中给定的参数,选择合适的方法。
方法表:
  虚拟机为每个类生成的方法声明(方法签名)和方法实现(实际调用的方法)的对应表。虚拟机通过这个表查找调用方法,提高调用效率。

二、异常

1 异常层次

Throwable 顶级父类
	Error:错误子类程序无法处理
		VirtualMechinaErrorJava
		StackOverFlowError
	Exception:可以编码修复的错误
		RuntimeException:
		IOException
		其他异常

Error一般是硬件问题,一般无法通过编程修复。Exception是可以通过编程手段修复的异常。主要为两大类
1.编译时异常:缺少符号,语法不正确
2.运行时异常:编译无问题,运行时出错

2 异常的处理

方式1:捕获

格式

	try{
	//	可能出现异常的程序。
	}catch(异常类型 异常名){
	//	解决办法
	}														
	// catch后面的语句可以向if-else if一样不断嵌套。

方式2:抛出

格式

	// 在方法的参表后添加throws+异常类型,具体如下
	// 修饰符 返回值类型 方法名(参表) Throws 异常类型1,异常类型2,......{方法体}
	pubilc void function () throws IOException, RuntimeException {
	}

注意:
1.我们一般不将异常抛给Main方法,因为main方法是程序的入口,其上对应的虚拟机,一般没有再给我们结束异常的地方了。
2.异常最终是要被解决的,所以编写程序时尽可能解决异常,而不是抛出
3.每个方法上都默认抛出RuntimeException

三、抽象类

1 概念

被abstract关键字修饰的类,就是抽象类。一般用于抽取子类的公共特征。

抽象方法:
没有方法体的方法,被abstract修饰的方法。

2 特点

1.类中有一个抽象方法的类一定是抽象类。
2.抽象方法和抽象类都必须由abstract修饰
3.抽象方法不可以有方法体,(不可以有{},并且要加分号;结束语句)
4.抽象类中可以有0 个到多个抽象方法
5.抽象类中可以有0个到多个具体方法;
6.抽象类不可以创建对象(new对象)但可以声明变量类型
7.抽象类可以声明成员变量
注:当不想让外界创建某一个类的对象时,可以声明该类是抽象类。

3 抽象类的子类

  抽象的子类继承抽象类时,有两种方式

方式一

  子类依然是抽象类,不实现父类的任何抽象化,纯粹扩展作用

方式二

  子类是普通类,必须实现抽象父类的所有抽象方法。
  注:所以抽象类的子类要么还是抽象类,要么实现抽象类中的所有抽象方法

4 抽象类中构造方法

抽象类中有默认的构造方法, 也可以人为设定构造方法,
作用:子类可以调用父类的构造方法创建对象。可以使用super关键字调用不同的构造方法。

5 拓展

面向抽象设计思路:
  当有多个不同类型的子类对象拥有的功能十分相似,但确有改变。如果挨个设计类,则每个类的代码量和设计时间都很长,而且相同功能使用的方法名不同,会给程序调用带来极大不便。调用就很复杂。
  使用面向抽象设计:向上抽取相同功能形成抽象父类。由于每个子类的功能都会不同,所以每个子类都会去改写父类的功能。父类的方法也就不用设计具体实现。
  父类的作用就是为子类制定规则,提高程序调用的灵活性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

麻辣麻虾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值