【幻化万千戏红尘】qianfengDay08-java基础学习:修饰符、重写、继承、抽象、递归、final
课程回顾:
方法的参数传递
static:
1、修饰属性
属于类的属性
2、修饰方法
3、修饰代码块
包
继承:
一个类可以拥有另一个类的信息
属性和方法都可以被继承
extends
单继承
super:
1、调用父类的属性和方法
2、调用父类构造方法
格式:super([实际参数列表]);
今日内容:
访问修饰符:控制访问权限的
public:公共的,项目中都可使用
protected:受保护的,当前类,包,并且还有子类中
default/package:没有访问修饰符的状态,当前类和包中
private:私有的,只能在当前类中使用
从严格到宽松:
private--->default--->protected---->public
修饰类:
public/default
修饰方法和属性:都可以修饰
重写:覆盖
发生在子类中
就是说子类可以对父类的方法进行功能的扩展
什么时候重写?
父类的方法满足不了子类的需求,所以才进行重写
重写规则:
1、除了访问修饰符,其他的都一样(静态/非静态、返回值类型、方法名、形式参数列表)
2、访问修饰符不能比父类的更严格
重写和重载的区别?
重载:
相似功能的方法采用同一方法名
同一类中
方法名相同
形式参数列表不同
重写:Override
子类对父类方法的扩展
子类中
访问修饰符不能比父类的更严格
静态/非静态、返回值类型、方法名、形式参数列表必须要相同
虚方法:可以被重写的方法,我们就叫虚方法
Object类:所有的类的父类
如果一个类没有继承另外的类,那么会默认继承Object类
公共方法:
1、toString:将当前对象转换为字符串
public String toString()
2、equals:比较2个对象是否相同
public boolean equals(Object obj)
3、hashCode:获取对象的哈希值
public int hashCode();
哈希值:是java为每个对象设计的一个整型标记
练习:请创建一个类,属性若干,方法若干,要求重新toString方法,使得返回属性的值
final:关键字 最终的
1、修饰类:最终类
不能被继承
一般如果一个类不允许别人对其扩展,那么我们就将该类设计为final
2、修饰变量:最终变量--->常量
final修饰属性:要是声明的时候,必须赋值,且只能赋值一次
final修饰局部变量:可以先声明后赋值,也可以声明的时候完成赋值,但是只能赋值一次
3、修饰方法:最终方法--->不能被重写(覆盖)
如果在开发中,某个方法不想被重写,那么就可以使用final修饰
static和final的区别?
有一对兔子,兔子的生长期为2个月,就可以生兔子了,以后每月1对,问8个月之后又多少对兔子?
1 1 2 3 5 8
问第8个数字为多少?
1 1 2 3 5 8 13 ……
问第13个数字为多少?
n<3:1
M(n-1)+M(n-2)
递归:方法内部出现了自己调用自己的现象
优点:精简代码
缺点:效率低
2大核心:
1、递归出口
2、向出口靠近
递归方法:要求必须得有条件不在自己调用自己(递归出口)
在使用递归的时候,应该积极避免死递归的出现(就是没有出口的递归)
练习:使用递归完成某个数的阶乘
abstract:关键字 抽象的
用法:
1、修饰类:抽象类
格式:[修饰符] abstract class 类名{
}
抽象类不能被实例化
可以拥有属性、方法、构造方法
抽象的实例化:
1、子类
2、匿名内部类
2、修饰方法:抽象方法
格式:[修饰符] abstract 返回值类型 方法名([形式参数列表]);
抽象方法只有方法的声明,没有方法的实现
有抽象方法的类一定是抽象类,抽象类不一定有抽象方法
class:创建类
this:
super:
static:
public
private
protected
final
abstract
import
package
extends
new