Java基础第四弹-----多态、抽象类、接口和异常


Java基础知识全解第四弹

记录回顾自己学过的java常见的基础知识,希望可以给初学者一些帮助,如果合适的话希望各位给一个免费的点赞和关注,在此谢谢各位了。

一、 final

1.概述

子类可以在父类的基础上改写父类内容,比如,方法重写。那么我们能不能随意的继承 API中提供的类,改写其内容呢?显然这是不合适的。为了避免这种随意改写的情况,Java提供了 final 关键字, 用于修饰不可改变内容。

final: 不可改变。可以用于修饰类、方法和变量。
类:被修饰的类,不能被继承。 比如我们的String、Math
方法:被修饰的方法,不能被重写。 
变量:被修饰的变量,不能被重新赋值,常量。    
2. 使用场景
  • 修饰类
final class 类名 {
}

public final class Stringpublic final class Mathpublic final class Scanner 等,很多的类,都是被final修饰的,目的就是供我们使用,而不让我们所以改变其内容。

  • 修饰方法
修饰符 final 返回值类型 方法名(参数列表){
	//方法体
}

重写被final修饰的方法,编译时就会报错。

3.总结

它可以用来修饰类,修饰方法,修饰变量。

被final修饰的类称为最终类,最终类不能被继承。

被final修饰的方法不能被重写。

被final修饰的变量不能被更改。

定义常量

public static final 类型 常量名 =常量值;

二、继承中的构造方法

①在子类对象构造的过程中,必须先构造其父类对象
②在子类的构造方法中,自动先调用父类的构造方法,然后才会继续往下执行构造子类对象
③在子类的构造方法中,可以使用super(参数列表)调用父类指定的某个构造方法
④如果写了super(参数列表),则必须写在子类构造方法的第一行,否则报错

⑤.如果子类中没有写super(参数列表),而父类中又有没有无参的构造方法,则编译报错。

三、前景知识

1.Object

这是所有类的根基类,当一个类不继承任何父类,就相当于继承了Object类,任何一个类都可以使用Object类中提供的方法

2.toString()

这是Object类提供的一个用来描述一个对象的方法,它返回一个String,表示该对象的字符串表示

3.instanceof

判断某个对象是否是某个类或某个类的子类的对象。

4.equals()

Object类中的equals()用来比较当前对象和传入的对象是否相等,Object类的equals()比较的是内存地址,当且仅当两个对象是同一个对象时,才返回true,所以我们需要重写equals(),把我们认为相等的标准写入equals()中。

四、多态

1. 多态定义

封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据。对外界而已它的内部细节是隐藏的,暴露给外界的 只是它的访问方法。

继承是为了重用父类代码。两个类若存在IS-A的关系就可以使用继承。

多态(Polymorphism)是面向对象编程中的一个核心概念。它指的是在不同的上下文中,使用同一个方法名或操作符来执行不同的操作。简单点来说,当父类引用指向子类对象的时候,由父类的引用去调用父类的方法,实际上调用到的是子类重写过后的方法。

2. 多态条件

1、要有继承;
2、要有重写;
3、父类引用指向子类对象

3.两种转型方式
3.1向上转型

子类自动转换成父类(父类引用指向子类对象)

例子:

Bird bird = new BailingBird();
Bird wuYa = new WuYa();
wuYa.shout();

说明:父类引用指向子类对象

父类引用可以赋值为其子类的对象,该引用只能访问到子类对象中的父类成员,无法访问到子类新增的成员。

我们可以理解为:把子类对象当成父类对象去使用,这种写法在Java称为“向上转型”。

3.2 向下转型

父类转子类

例子:

编译阶段是父类类型,运行时阶段是子类类型
Bird bird = new BailingBird();
BailingBird bb = (BailingBird) bird;
System.out.println(bb);

格式 (子类类型)父类引用

作用:

当父类对象引用指向子类对象的时候,我们可以将其父类的类型转成子类的类型,转型后,该引用就可以访问子类中新增加的成员。

好处:对象的“向上转型”和“向下转型”可以使我们的代码可拓展性好。

==注意:==如下强制转换会出现ClassCastException

  • 父类不能直接转换成子类

  • 同类之间不能相互转换

  • 不同类之间不能相互转换

4.为什么要转型

向上转型:多态的体现,可以表示父类对应的多个子类对【弊端:子类某些功能无法使用】

向下转型:为了重新获得因为向上转型而丢失的子类特性而存在

五、抽象类

1.定义

在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是反过来却不是这样。并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。所有抽象类代表抽象的概念的类,是不能具体的被创建出来的,也就是说不能通过new关键字来创建抽象类的对象。

2.格式

语法:

abstract class 类名{
    属性...
    方法:普通他方法、抽象方法
}

注意事项:

1.抽象类不能被实例化。
2.抽象类可以有构造函数,被继承时子类必须继承父类一个构造方法,抽象方法不能被声明为静态。
3.抽象方法只需申明,而无需实现,抽象类中可以允许普通方法有主体
4.含有抽象方法的类必须申明为抽象类
5.抽象的子类必须实现抽象类中所有抽象方法,否则这个子类也是抽象类。
3.抽象方法

通过关键字abstract修饰的方法就是抽象方法(一个方法只有声明没有实现,那么这个方法叫抽象方法,抽象方法必须被abstract修饰)

  	1、抽象方法没有方法体
  	2、子类必须要重写父类的抽象方法,

抽象类和普通类的区别

1、普通类可以去实例化调用;抽象类不能被实例化,因为它是存在于一种概念而不非具体。
2、普通类和抽象类都可以被继承,但是抽象类被继承后子类必须重写继承的方法,除非子类也是抽象类。
4.总结

含有抽象方法的类叫抽象类,抽象类必须被abstract修饰,抽象类不能被实例化,当子类继承抽象类,必须重写其中的抽象方法。

六.接口

1.定义

接口是抽象方法和常量的集合,接口中的方法是抽象的,无需去写abstract,接口中的方法也是公共的,无需去写public。

我们使用interface定义一个接口:

public interface 接口名{
	静态常量和抽象方法;
}
2.接口的使用
2.1 我们使用implement来将一个类实现某个接口。

①一个类实现了一个接口,就必须重写接口中的全部抽象方法

接口的引用可以指向其实现类的对象,当该引用调用接口中的抽象方法时,实际上调用的是实现类重写过后的方法,所有接口具有多态性

③ Java中的接口是多实现的,一个类可以实现多个无关的接口,当接口引用指向实现类对象时,该引用只能访问其重写当前接口的方法,但其可以转型成其他接口类型,从而访问其他接口中的方法。

④接口也体现了面向对象的封装性

3.为什么使用接口

Java接口和Java抽象类代表的就是抽象类型,就是我们需要提出的抽象层的具体表现。OOP面向对象的编程,如果要提高程序的复用率.

七.异常

1.异常的定义
2.异常处理

五个关键字:try、catch、finally、throw、throws

①try代码块----尝试运行可能发生异常的代码。

②catch代码块------发生异常时,捕获异常对象并进行处理。

③throw-----抛出一个异常对象

④throws----告诉调用者抛出什么类型的异常对象

⑤finally--------这是跟在try/catch后面的三个代码,它里面的代码无论抛不抛出异常,都一定会执行。

3.异常类结构

​ Throwable//第一层

​ Error Exception //第二层

​ RuntimeException 检查异常//第 三层 //第四层

//第n层

注意:当一个try对应多个catch的时候,多个catch异常类是继承关系,那么必须将子类异常写在父类异常前面。

总结

java基础第四弹,主要介绍了java中多态、抽象类、接口和异常等相关知识,我在整理资料和编写的过程中,完成了对这些java相关知识的梳理和深刻理解。希望我对知识梳理的成果对各位读者有所帮助。再次感谢各位的阅读,一个菜鸟的起飞之路。

  • 10
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值