1.this和super
this是一个指向本对象的指针, 然而super是一个Java关键字。
this 指向当前对象 ,super 指向当前对象的父类
- 直接this.xxx 直接super.xxx
- this 在构造方法中,如果参数和成员变量重名 用来区分成员变量和参数 , super 如果父类和子类有重名的方法名或者成员变量名 用super区分
- this()和super()都指的是对象,所以均不可以在static环境中使用。包括:static变量,static方法,static语句块。
- this(参数):调用本类中另一种形式的构造函数(放在构造函数中的第一条语句),super(参数):调用父类中的某一个构造函数(放在构造函数中的第一条语句)。
注意:只要父类存在有参数构造方法,子类构造方法中需要显式调用父类的构造方法
this 和 super 不能出现在同一个构造器里
子类没有显式声明任何构造方法的时候创建子类对象,会调父类无参数的构造方法
this() super() 调用构造方法放在构造方法的第一行
2.== 和 equals
==比较内存中的地址,equals是类的方法,Object中的equals方法是比较内存中的地址,其他子类可以重写,例如String重写了equals,可以比较字符串内容
3. 静态变量static和常量final
static 修饰的方法或者属性属于类的 不用实例化对象就可以直接调用,, 和继承没有任何关系
final 不可以修饰接口,
final 不能修饰抽象类,
final 修饰的变量后即为常量 值不可更改
final 修饰的常量, 必须要赋值。 可以初始化的时候赋值, 可以在构造方法里赋值。
final 修饰的方法不能被重写 可以在一个类里重载
4.
父类指向子类的引用 这个是自动的
可以调用子类或者父类里的方法 (要是调子类的方法 该方法必须是重写的方法)
5. 重载 和 重写
重载:在同一个类里,方法名相同,签名的顺序,签名的个数,签名的数据类型不同。
重写:在父子类里,方法名相同, 签名完全相同,返回值类型相同。子类的异常范围小于等于父类,子类的返回值范围小于等于父类,子类的权限修饰符大于等于父类,private修饰的方法不能被子类重写,调用顺序 先调子类的
6.抽象类和接口
- 抽象类不能被实例化(不能创建对象)
- 抽象类不一定包含抽象方法 但是含有抽象方法的类一定是抽象类,
- 抽象类的抽象方法没有方法体只有声明
- 构造方法,static 类方法 不能声明为抽象方法
- 抽象类的子类必须给出抽象类中的抽象方法的实现除非子类还是抽象类
- 接口中的每一个方法都是隐式抽象的(public abstract)
- 接口中的每一个属性都是public static final 类型的
- 接口的方法不能在接口实现 只能由实现接口的类来实现,一个类可以实现多个接口, 一类只能继承一个类
例如:一个类要实现一个接口,那么必须实现接口里的每个方法,那么如果你实现了接口里的一部分方法,而有些方法没有实现的话,那么这个类就必须定义成抽象类,如果全部实现了接口中的方法,你可以定义这个类抽象,也可以定义这个类为实体类(因为一个类含有抽象方法的话这个类就必须定义成抽象类)。
7.权限修饰符的种类和区别
public protected default private
同一个类 √ √ √ √
同一个包 √ √ √ ×
子 父类 √ √ × ×
不同的包 √ × × ×