JAVASE-2
一、继承
1.1 为什么用继承
为了实现代码的重用,将多个类里的共同的属性和方法,写在一个类里作为父类,需要写的类作为子类,继承父类里的属性和方法,子类和父类要符合 is-a的关系。
1.2 继承的语法
1.3 继承的特点
- 继承的单根性:一个子类只能有一个父类,反过来说,一个父类可以派生出多个子类。
概念性的:子类也叫做派生类,父类也叫做基类。 - 继承具有传递性:如B继承了C,A再继承了B。
1.4 super和this
- this代表的是当前类对象;
- super代表当前类的父类,super.调用的都是从父类里继承过来的属性和方法,如果父类里的属性是private,只能通过get/set方法访问属性;
1.5 子父类的构造方法执行顺序问题
创建子类对象,父类的构造方法是一定会执行,并且一定在子类的构造方法代码执行之前执行。
当子类构造方法没有通过super关键字,显示的指定执行父类哪一个构造方法,那么系统默认执行父类无参构造方法,注意父类里有没有无参构造方法。
1.6 方法的重写、覆盖,子类的方法覆盖父类继承过来的方法
访问修饰符,返回值类型,方法名,参数列表与父类的方法一致,重写的只是方法体的部分。
1.7 父类里的哪些成员可以被子类继承
构造方法不能被继承,也不允许被重写。
四个访问修饰符:修饰类里的成员的,属性和方法,控制它们的访问级别:
- public:公共的,访问级别最高;
- protected:受保护的,在不同包里的非子类,无法访问该修饰符修饰的成员;
- 默认:只在同一个包内的其他类可以用;
- private:私有化,即使是子类也是访问不了的,子类不能继承,访问级别仅限于当前类,访问级别最低的;
final
- 修饰变量,该变量就变成了常量,不允许修改值。
- 修饰方法,不允许被重写
- 修饰类,该类不允许被继承
String 类就是final类,所以说String 是不可能存在子类
1.8 抽象类和抽象方法
抽象类是不允许被实例化对象的类,作用是作为父类,被子类继承。
抽象类可以向普通类一样写属性,写封装,写方法,写构造方法
抽象方法:
- 抽象方法只能放入抽象类里,抽象类里可以放任何方法;
- 抽象方法,子类必须要重写,除非子类还是个抽象类,也是为了约束子类,必须要有该方法;
- 抽象方法没有方法体;
二、多态
多态:就是多种形态,java里的多态,指的是同一种类型的对象,对同一消息的不同响应。即同一父类类型的不同子类对象,调用相同的方法。
实现多态的条件: 一定是子类的对象,类型是父类类型,调用的方法必须父类里存在,并且子类里重写,实际执行的是子类重写后的方法。
如下面程序中调用的都是master.feed()方法,但参数放置的对象不同,执行的方法便是对应子类里重写的方法。简而言之,通过父类来间接使用子类的方法,可节省大量代码。
多态概念比较抽象,需在程序中多加练习。
实现方法:
- 多态可以减少代码量,可以提高代码的可扩展性和可维护性。
- 向上转型–子类转换为父类,自动进行类型转换。
- 向下转型–父类转换成子类,结合instance of 运算符进行强制类型转换
- 实现多态的两种方式
- 使用父类作为方法形参实现多态
- 使用父类作为方法返回值实现多态
三、接口
3.1 什么是接口
接口:代表的是功能,当某个对象has a 功能的时候, 写接口,接口的目的是为了使用多态,使程序的扩展性更好。接口目的也是让其他类来实现(继承)接口,接口可以多继承,它也是为了解决类之间的继承是单继承的这个问题。
3.2 接口的语法
JDK1.8之前,接口里只能有 一组抽象方法。接口里可以写静态常量,但不能创建对象。
接口只是一组方法的声明,接口的目的是为了被继承,也叫被实现。接口实现多态与类实现多态是完全相同的。
3.3 接口与抽象类的区别
相同点:都不能创建对象,都是想被继承,都可以实现多态。
不同点:抽象类是单继承,接口是多继承。
3.4 如何继承(实现)
接口通过 implements进行继承,想要多继承时各个接口用逗号隔开
3.5 lambda表达式
一般叫它为匿名函数,通过它可以进行函数式编程,可以实现方法的传递。实际上它代表的是接口的实现类对象,只是为了简化代码,就直接写方法的重写。语法:
- 参数列表的小括号,只有在一个参数的情况下可以省略,如果方法体只有一条语句,那么大括号也可以省略。
- 接口里只能有一个抽象方法时,才可以考虑使用lambda表达式。
Imath imath = (x,y)->{
return x*y;
};
System.out.println(imath.computer(2, 3));
四、异常
4.1 异常简介
异常是指在程序的运行过程中所发生的不正常的事件,它会中断正在运行的程序。
为了程序的健壮性,需要对程序做异常处理。
4.2 怎样做异常处理
- 原理
- 用法
finally无论在任何情况下都会被执行,唯一在终止程序后,不能执行。
多重捕获异常
4.3 throw 和throws
程序里用throw抛出异常,那么该方法要么用try-catch来做异常处理,要么将该方法通过throws设置方法为可能发生异常的方法。
throws作用是声明异常方法。
4.4 自定义异常类
异常类要继承父类Exception。
异常处理的时候