1. 构造方法
-
public + 类名,没有返回值也没有void
-
编译器会自动给我们生成默认的构造方法
-
若有自定义构造函数,那么编译器就不会帮我们生成默认构造,所以提倡在写自定义构造时把默认构造写上
-
一个构造方法可以调用其他构造方法,这样做的目的是便于代码复用
-
this(),super()才是构造函数中必须第一行,而this,super不是,而main方法中不用调用this
-
构造方法不能被static、final、synchronized、abstract、native修饰,但public、private、protected可以
public class User {
private int age;
private String name;
//默认构造
public User(){
}
//自定义构造
public User(int age, String name) {
//调用父类默认构造,一般自动加上,可以省去不写
super();
this.age = age;
this.name = name;
}
}
2. 修饰符访问范围
本类内部 | 本包 | 子类继承关系 | 外部包且没关系 | |
---|---|---|---|---|
public | √ | √ | √ | √ |
protected | √ | √ | √ | × |
default | √ | √ | × | × |
private | √ | × | × | × |
3. 继承
- 继承父类已有的字段和方法,实现代码复用,我们只需写额外代码即可
- java只允许单继承,所有类直接或简介继承Object,但Object没有父类
- 接口没有继承Object
- 构造方法不能被继承,子类不会继承任何父类的构造方法,只是在创建的时候会默认调用父类构造
- instanceof只会判断是否给类类型,不考虑继承关系
- final修饰类,则类不能被继承
- 构造方法不是类的成员方法
public class User2 extends User {
}
4. 方法重载
一个类中定义多个方法,这些方法名字必须相同,返回类型可以相同也可以不相同,但参数类型,顺序,个数必须不同
public class User {
public String hello(){
return "hello";
}
public String hello(int i){
return "hello" + i;
}
public String hello(int i,String str){
return str + i;
}
}
5. 方法重写
- 发生在继承关系中,方法重写应遵循“两同两小一大”原则:
- “两同”:即方法名相同,形参列表相同;
- “两小”:子类方法声明抛出的异常比父类方法声明抛出的异常更小或者相等,子类返回值小于等于父类;
- “一大”:子类方法的访问修饰符应比父类方法更大或相等
- final修饰的方法不能被重写,但可以重载
6. 多态
一种事物的多种存在形态,分为编译时多态(方法的重载),和运行时多态(向上下转型)
- 继承
- 重写
- 向上转型
7. 封装
把数据封装起来,对外提供接口使之与外部发生联系,用户无需知道对象内部的细节
public class User {
private int age;
private String name;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}