- 将属性私有化
- 提供一个公共的set方法,用于对属性判断并赋值
- 提供一个公共的get方法,用于获取属性的值
二、继承 1. 继承:代码的复用性提高了; 代码的扩展性和维护性提高了。
2.继承细节:
- 子类继承了所有的属性和方法,但是私有属性和方法不能在子类直接访问,要通过父类提供公共方法访问。
- 子类必须调用父类的构造器,完成父类的初始化。
- 当创建子类对象时,不管使用子类的哪个构造器,默认情况下总会去调用父类的无参构造器,如果父类没有提供无参构造器,则必须在子类的构造器中用super去指定使用父类的哪个构造器完成对父类的初始化工作,否则,编译不会通过。
- java所有类都是Object的子类
- 父类构造器的调用不仅限于直接父类,将一直向上追溯到Object类(顶级父类)
- 子类最多只能继承一个父类(直接继承),即单继承。
- 不能滥用继承,子类和父类之间必须满足is-a的逻辑关系。
4.super: 代表父类的引用,用于访问父类的属性,方法,构造器。
- 访问父类的属性,但不能访问父类私有的属性。
- 访问父类的方法,但不能访问父类的私有方法。(super.方法名)
- 访问父类的构造器,只能放在构造器的第一句
- 分工明确,父类属性由父类初始化,子类属性由子类初始化
- 当子类中有和父类中的成员重名时,为了访问父类的成员,必须通过super,如果没有重名,使用super,this,直接访问是一样的效果。
- super的访问不限于直接父类,如果爷类和本类中有同名的成员,也可以用super去访问爷类的成员;如果上级类中都有同名的成员,使用super遵循就近原则,也要遵循访问权限的相关规则。
三、 1.方法重写(覆盖override):子类有一个方法,和父类的某个方法的名称,返回类型,参数一样。 2.方法重写细节:
- 子类方法的参数,方法名名称,要和父类方法的参数,方法名称完全一样。
- 子类方法的返回类型和父类的返回类型一样,或者是父类的返回类型的子类。
- 子类方法不能缩小父类方法的权限。
- 一个对象的编译类型和运行类型可以不一致
- 编译类型在定义对象时,就确定了,不能改变
- 运行类型可以变化的
- 编译类型看定义时=号的左边,运行类型=号的右边
- Animal animal=new Dog(); 编译类型是Animal ,运行类型是Dog().
- 多态的前提是两个对象是继承关系。
- 多态的向上转型:
- 父类的引用指向了子类的对象:
- 可以调用父类的所有成员(遵守访问权限)
- 但是不能调用子类的特有的成员,因为在编译阶段,能调用哪些成员,是由编译类型决定的。
- 最终的运行效果还要看子类的具体实现,即调用方法时,按照从子类开始查找方法,然后调用。
- 语法:子类类型 引用名=(子类类型) 父类引用
- Cat cat=(Cat) animal;
- 只能强转父类的引用,不能强转父类的对象
- 要求父类的引用必须指向的是当前目标类型的对象
- 当向下转型后,可以调用子类类型中所有的成员
- 属性没有重写之说,属性的值看编译类型
- instanceOf 比较操作符,用于判断对象的运行类型 是否为XX类型或XX类型的子类型
- 当调用对象方法的时候,该方法会和该对象的内存地址/运行类型绑定
- 当调用对象属性时,没有动态绑定机制,哪里声明,哪里使用
7.多态参数: 方法定义的形参类型为父类类型,实参类型允许为子类类型。 五、 1.Object类详解: (1)==和equals的对比:
- == 既可以判断基本类型,又可以判断引用类型
- == 是一个比较运算符
- == 如果判断基本类型,判断的是值是否相等
- == 如果判断引用类型,判断的是地址是否相等,即判定是不是同一个对象
- 是Object类中的方法,只能判断引用类型
- 默认判断的是地址是否相等,子类中往往重写该方法,用于判断内容是否相等
- 默认返回,全类名 + @ +哈希值的十六进制,子类往往重写toString方法,用于返回对象的属性信息
- 重写toString方法,打印对象或者拼接对象时,都会自动调用该对象的toString形式
- 当直接输出一个对象时,toString方法会被默认的调用
2. 断点调试:



