1、重载、重写
方法的重载(overload)和重写(override)都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。
重载发生在一个类中,要求:
方法名相同
参数列表不同(参数类型不同、参数个数、顺序不同或者三者都不同)
与返回值类型无关
重写必须发生在继承关系中,子类覆盖父类的方法,要求:
方法名相同
参数列表相同
返回值类型相同
子类的访问修饰权限>=父类
- 子类方法的访问权限必须大于等于父类方法;
- 子类方法的返回类型必须是父类方法返回类型或为其子类型。
- 子类方法抛出的异常类型必须是父类抛出异常类型或为其子类型。
2、super关键字的两种用法
<1、子类查找父类的变量成员属性,方法
<2、调用父类的构造函数,(先调父类再调子类,必须写在调用的第一行)
3、this,super
this:本类对象的引用
super:父类对象的引用(必须是继承关系)
成员变量: this.变量 本类的成员变量
super.变量 父类的成员变量
构造方法: this() 本类的构造方法 调用构造函数放第一行
super() 父类的构造方法
成员方法: this.方法名 本类的成员方法
super.方法名 父类的成员方法
4、访问修饰符范围从大到小:public > protected > default > private
5、final关键字
修饰的类 不可以被继承
修饰的方法 不可以被重写
修饰的变量 不可以被更改
6、static关键字------------参考https://www.cnblogs.com/dolphin0520/p/3799052.html
1)static方法
static方法一般称作静态方法,由于静态方法不依赖于任何对象就可以进行访问,因此对于静态方法来说,是没有this的,因为它不依附于任何对象,既然都没有对象,就谈不上this了。并且由于这个特性,在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法/变量都是必须依赖具体的对象才能够被调用。
但是要注意的是,虽然在静态方法中不能访问非静态成员方法和非静态成员变量,但是在非静态成员方法中是可以访问静态成员方法/变量的。
2)static变量
static变量也称作静态变量,静态变量和非静态变量的区别是:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。
static成员变量的初始化顺序按照定义的顺序进行初始化。
3)static代码块
static关键字还有一个比较关键的作用就是 用来形成静态代码块以优化程序性能。static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次。
为什么说static块可以用来优化程序性能,是因为它的特性:只会在类加载的时候执行一次。
7、抽象类:不能被实例化,
抽象方法:public abstract void hhh();//没有方法体{}
存在的意义被子类重写。。。
8、
- new Integer(123) 每次都会新建一个对象;
- Integer.valueOf(123) 会使用缓存池中的对象,多次调用会取得同一个对象的引用。
9 、String, StringBuffer and StringBuilder
1. 可变性
- String 不可变
- StringBuffer 和 StringBuilder 可变
2. 线程安全
- String 不可变,因此是线程安全的
- StringBuilder 不是线程安全的
- StringBuffer 是线程安全的,内部使用 synchronized 进行同步