#三大特性
封装
属性私有,get/set
- 该露的露,该藏的藏
- 程序设计要求”高内聚,低耦合“
- 高内聚:类的内部数据操作细节自己来完成,不允许外部干涉
- 低耦合:仅暴露少量的方法给外部使用
- 程序设计要求”高内聚,低耦合“
- 封装(数据的隐藏)
- 应禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问 ,这称为信息隐藏
private 私有属性
alt+insert 生成get/set方法快捷键
意义:
- 提高数据的安全性
- 隐藏代码的实现细节
- 统一接口
- 提高系统的可维护性
继承
继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模
- 继承是类与类之间的一种关系,除此之外类和类之间的关系还有依赖、组合、聚合等
- 继承关系的两个类,一个为子类(派生类),一个为父类(基类)。
- 子类继承父类,使用关键字extends来表示,extends的是意思是扩展。子类是父类的扩展
- 子类继承父类,就会拥有父类的全部方法
- Java中只有单继承,没有多继承
- 子类和父类之间,从意义上讲应该具有" Student is a Person"的关系
- 在Java中,所有的类都直接或者间接继承object类
super关键字
- super是调用父类的构造方法,必须在构造方法的第一个
- super必须只能出现在子类的方法或者构造方法中
- super和this不能同时调用构造方法
super和this
- 代表的对象不同
- this:本身调用者这个对象
- super:代表父类对象的应用
- 前提
- this:没有继承也可以使用
- super:只能在继承条件下使用
- 构造方法
- this():本类的构造
- super():父类的构造
方法的重写
前提:继承关系,子类重写父类的方法
- 方法名必须相同
- 参数列表必须相同
- 修饰符:范围可以扩大 public > protected > default > private
- 抛出的异常:范围可以被缩小,不能扩大
子类的方法和父类的必须要一致,方法体不同
为什么需要重写
- 父类的功能子类不一定需要或者不一定满足
- 快捷键:alt+ins
多态
实现动态编译:类型->可拓展性
同一种方法可以根据发送对象的不同而采取不同的多种行为方式
一个对象的实际类型是确定的,但可以指向对象的引用的类型有很多(父类或者相关类)
多态是方法的多态,属性没有多态
多态存在的条件
- 有继承关系
- 子类重写父类的方法
- 父类引用指向子类对象
多态注意事项:
- 多态是方法的多态,属性没有多态
- 父类和子类,有联系---->类型转换异常:ClassCastExcepection
- 存在条件:继承关系,方法需要重写,父类的引用指向子类对象
不能重写的方法,即无多态:
static 静态方法,属于类,它不属于实例
final 常量
private方法,私有方法
补充
instanceof和类型转换
instanceof 判断一个对象是什么类型
System.out.println(X instanceof Y);
类型转换:
- 父类引用指向子类的对象
- 把子类转换为父类,向上直接转型
- 把父类转换为子类,向下强制转型
- 类型转换可方便方法的调用,减少重复代码,简洁
- 子类转换为父类,可能丢失自己本来的一些方法
static关键字
特点
- Static是一个修饰符,用于修饰成员。
- Static修饰的成员被所有的对象所共享。
- Static优先于对象存在,因为static的成员随着类的加载就已经存在了。
- Static修饰的成员多了一种调用方式,就可以直接被类名所调用。类名,静态成员。
- Static修饰的数据是共享数据,对象中的存储的是特有数据。
-
静态变量:static关键字用来声明独立于对象的静态变量,无论一个类实例化多少对象,它的静态变量只有一份拷贝。局部变量能被声明为static变量。
-
静态方法:static关键字用来声明独立于对象的静态方法,静态方法不能使用类的非静态变量。静态方法从参数列表得到数据,然后计算这些数据。
代码块
package oop.demo08;
public class Person {
{
//匿名代码块 2 赋初值
System.out.println("匿名代码块");
}
static{
//静态代码块 1 只执行一次
System.out.println("静态代码块");
}
public Person() {
//3
System.out.println("构造方法");
}
public static void main(String[] args) {
Person person1 = new Person();
System.out.println("===========");
Person person2 = new Person();
}
}
输出:(注意执行顺序)
静态代码块
匿名代码块
构造方法
===========
匿名代码块
构造方法