面向对象
类
是什么
类表示一类具有相同属性和行为的事物的抽象
人:身高,体重,兴趣爱好,姓名,年龄。。。
学生:学号,姓名,班级,课程。。。
为什么
java是面向对象语言,而创建对象就需要类。类是对象的抽象,对象是类的具体化。学生类,小明同学就是学生类的一个具体表现,即学生类的一个对象。小明,小刚都是学生,学生类就是小明同学,小刚等同学的抽象。
使用
public class 类名{
属性修饰符 属性类型 属性名;
修饰符 放回值类型/void无返回值 方法名(){
}
}
注意:属性与行为根据需求定义
类里面只能定义共有的属性或行为
是否需要计算。 价格BigDecimal
对象
是什么
类的实例化;
为什么
类是抽象的,不能实现具体的业务逻辑,而对象是具体的
例子:教师上课 要实现就是 张老师去上课
使用
//直接实例化
new 类名();
//添加引用实现
引用类型 对象名 = new 类名();
注意:每次new出来的对象都会创建新的内存地址,用来存放成员变量
单例 多例 堆栈图
通过“==”比较内存地址
单例
多个引用指向同一个对象
多例
多个引用指向各自对象
this | 指向当前方法的调用者对象 |
---|
方法
定义:
表示某种行为 函数
修饰符 返回值 方法名(参数){
方法体
}
返回值为 void 方法体可以使用return 作为方法的终结
为什么
实现具体功能 减少代码冗余 提高复用 ->好处:减少代码量和方便维护
构造方法
为什么:在对象创建时就有属性值
new对象就是new 类的构造方法
使用:
public 类名(属性类型 属性名){
}
默认情况下,如果类中没有构造方法,JVM会提供无参构造方法 ,当定义有参构造时,JVM不会提供无参构造,需要自己在类中定义
重载
功能相似的方法,可以同名;
调用的时候根据形参列表去调用具体哪个方法。
重载规则:
- 方法名相同;
- 参数列表不同(个数,类型,顺序;
- 和返回值类型和权限无关
抽象类
父类的功能不知道怎么定义,需要子类实现 -->父类声明为抽象类 方法为抽象方法
特征:
- 可以定义构造器,但是不能new对象,
- 只能子类继承,一个类只能继承一个抽象类
- 子类继承抽象类,重写抽象方法或者将方法继续声明为抽象
- 可以包含静态方法,不能抽象;不能被final修饰
- 抽象类中不一定有抽象方法,可有抽象方法和普通方法。
- 有抽象方法的类一定要为抽象类
- 成员变量修饰符可以是 private、默认、protected、public
- 可以定义成员变量
使用
public abstract class Pet{
public abstract void eat();
}
接口
接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。
接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。
除非实现接口的类是抽象类,否则该类要定义接口中的所有方法。
接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。另外,在 Java 中,接口类型可用来声明一个变量,他们可以成为一个空指针,或是被绑定在一个以此接口实现的对象。
接口与类相似点:
- 一个接口可以有多个方法。
- 接口文件保存在 .java 结尾的文件中,文件名使用接口名。
- 接口的字节码文件保存在 .class 结尾的文件中。
- 接口相应的字节码文件必须在与包名称相匹配的目录结构中。
接口与类的区别:
- 接口不能用于实例化对象。
- 接口没有构造方法。
- 接口中所有的方法必须是抽象方法,Java 8 之后 接口中可以使用 default 关键字修饰的非抽象方法。
- 接口不能包含成员变量,除了 static 和 final 变量。
- 接口不是被类继承了,而是要被类实现。
- 接口支持多继承。
接口特性
- 接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错)。
- 接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误)。
- 接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。
抽象类和接口的区别
- 方法体:抽象类中的方法可以有方法体,就是能实现方法的具体功能,但是接口中的方法不行。
- 成员变量:抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的。
- 静态:接口中不能含有静态代码块以及静态方法(用 static 修饰的方法),而抽象类是可以有静态代码块和静态方法。
- 继承:一个类只能继承一个抽象类,而一个类却可以实现多个接口。
- 构造器:接口中不可定义构造器,抽象类可以。
- 抽象方法:有抽象方法的类一定是抽象方法,抽象类未必要有抽象方法。接口中只有抽象方法。