面向对象:
面向对象的思想:面对问题的时候,先思考问题中有哪些对象,对象之间有着哪些关系,哪些类去实现哪些方法。
类是同一事物的概念(你脑海中对事物的称呼),对象是事物实际的存在(你感官中的事物具体状态)。
类的创建:
public class 类名{
构造代码块
静态代码块
成员变量
构造方法
成员方法
}
对象的创建和使用:
对象的创建: 通过类中的构造方法来创建。
对象的使用:
访问成员变量: 对象名.成员变量名
访问成员方法: 对象名.成员方法名(实参);
无返回值的方法: 对象名.成员方法名(实参);
有返回值的方法:
直接调用: 对象名.成员方法名(实参);
赋值调用: 数据类型 变量名 = 对象名.成员方法名(实参);
输出调用: System.out.println(对象名.成员方法名(实参));
封装:
使用private修饰成员变量或者成员方法,被修饰后无法在外部被调用,成员变量通过提供set\get方法来进行使用。
继承:
继承的格式:
public class Zi extends Fu{}
继承后成员的访问特点:
子类继承父类后,就拥有了父类的成员变量和成员方法
抽象类:abstract关键字
父类中的某个方法,在他不同的子类中有着不同的方法体,那么该方法就应该定义为抽象方法。
抽象类中可以不定义抽象方法,但是抽象方法所在的类,一定是抽象类
父类是抽象类,子类在继承父类的时候,需要重写父类中所有的抽象方法。
接口:
定义接口使用interface关键字, 是方法的一个"集合",编译之后会产生class文件。
接口不能创建对象, 需要实现接口(implements), 实现接口的类叫做实现类(接口的子类)
- 实现类: 普通类 必须重写接口中的抽象方法
- 实现类 ;抽象类 可以不用重写接口中的抽象方法
格式:public interface 接口名称 {
// 常量(jdk7)
// 抽象方法(jdk7)
// 默认方法(jdk8)
// 静态方法(jdk8)
// 私有方法(jdk9)
}
多态:
1.形成多态: 类的继承\接口的实现
父类的引用指向子类的对象 \ 接口的引用指向实现类的对象方法的重写
2.多态后的成员访问特点:
除了非静态方法是编译看父类,运行看子类,其余都是看父类
3.多态的好处: 形参多态,返回值多态,变量多态
父类的引用可以接收该父类对象或者其所有子类对象
接口的引用可以接收该接口的所有实现类对象
4.多态的弊端解决:
向下转型
instanceof关键字
super:
访问父类的成员变量: super.父类成员变量名
访问父类的成员方法: super.父类成员方法名(实参);
访问父类的构造方法: super();super(实参);
this:
访问本类的成员变量: this.本类成员变量名
访问本类的成员方法: this.本类成员方法名(实参);
访问本类的构造方法: this();this(实参);
final: 表示不可变
修饰类:被修饰的类不能被继承
修饰方法:被修饰的方法不能被重写
修饰变量:被修饰的变量只能赋值一次(常量)
static:静态
修饰成员变量:
格式: static 数据类型 变量名
特点: 可以被该类的所有对象共享一份数据
使用: 类名.变量名
修饰成员方法:
格式: 修饰符 static 返回值类型 方法名(形参列表){}
使用: 类名.方法名(实参);
特点:在静态方法中,只能调用静态方法和静态的成员变量。
代码块:
构造代码块
格式: {}
位置: 类中,方法外
执行: 每次调用构造方法之前都会执行一次
静态代码块
格式: static{}
位置: 类中,方法外
执行: 随着类的加载而执行,并且只执行一次
局部代码块
格式: {}
位置: 方法中
执行: 按照方法的执行顺序,执行到局部代码块的时候就执行
匿名内部类:
本质:是一个类的匿名子类的对象\是一个接口的匿名实现类的对象
格式:
new 类名\接口名(){
重写抽象方法
};
用途:可以直接当参数使用。