文章目录
Java基础知识全解第四弹
记录回顾自己学过的java常见的基础知识,希望可以给初学者一些帮助,如果合适的话希望各位给一个免费的点赞和关注,在此谢谢各位了。
一、 final
1.概述
子类可以在父类的基础上改写父类内容,比如,方法重写。那么我们能不能随意的继承 API中提供的类,改写其内容呢?显然这是不合适的。为了避免这种随意改写的情况,Java提供了 final 关键字, 用于修饰不可改变内容。
final: 不可改变。可以用于修饰类、方法和变量。
类:被修饰的类,不能被继承。 比如我们的String、Math
方法:被修饰的方法,不能被重写。
变量:被修饰的变量,不能被重新赋值,常量。
2. 使用场景
- 修饰类
final class 类名 {
}
public final class String
、public final class Math
、public 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相关知识的梳理和深刻理解。希望我对知识梳理的成果对各位读者有所帮助。再次感谢各位的阅读,一个菜鸟的起飞之路。
标签:Java,对象,子类,多态,接口,-----,抽象类,父类,方法 From: https://blog.csdn.net/qq_65124761/article/details/140674494