Java封装、继承、多态笔记

145 阅读4分钟

封装(encapsulation):

封装的定义

封装就是把抽象出的数据(属性)和对数据的操作(方法)封装在一起,数据被保护在内部,程序的其他部分只有通过被授权的操作(方法),才能对数据进行操作。

封装的好处

(1)隐藏实现细节(2)可以对数据进行验证,保证安全合理。

封装的实现步骤

a. 将属性进行私有化,使外界不能直接修改属性
b. 提供一个公共的set方法,用于对属性判断并赋值
c. 提供一个公共的get方法,用于获取属性的值

继承 (代码复用)

继承的定义

子类继承了父类所有的属性和方法,非私有的属性和方法可以在子类直接访问。但是私有属性和方法不能在子类直接访问,要通过公共的方法去访问。比如定义一个类 public class Employee{} 它的子类 public class Teacher extends Employee{}

继承注意事项

1.子类必须调用父类的构造器,完成父类的初始化

2.当创建子类对象时,不管使用子类的哪个构造器,默认情况下总会去调用父类的无参构造器,如果父类没有提供无参构造器,则必须在子类的构造器中用super去指定使用父类的哪个构造器完成对父类的初始化工作,否则,编译不会通过。

3.如果希望指定去调用父类的某个构造器,则显式的调用一下:super(参数列表),什么都不写默认调用父类的无参构造器(不写默认有super)

4.super在使用时,必须放在构造器第一行 ,super只能在构造器中使用

5.super() 和this()都只能放在构造器第一行,因此这两个方法不能共存一个构造器

6.java所有类都是Object类的子类,Object是所有类的基类

7.父类构造器的调用不限于直接父类,将一直往上追溯到Object类

8.子类最多只能继承一个父类,即java中是单继承机制

9.子类和父类之间必须满足is -a逻辑关系 比如猫是动物

super关键字

    一、语法
	1.(super.属性名)访问父类的属性,但不能访问父类的 private属性
	2.super.方法名(参数列表)访问父类的方法 ,但不能访问父类的private方法
	访问父类的构造器,只能放在构造器的第一句
    二、 super带来的便利,细节
	1.调用父类的构造器的好处(父类属性由父类初始化,子类属性由子类初始化)
	2.当子类中有和父类中的成员(属性和方法)重名时,为了访问父类的成员,
          必须通过super3.super的访问不限于直接父类,如果爷爷类和本类中有同名的成员,也可以使用super去访问爷爷类的成员

多态(polymorphic)

多态的定义

方法或对象具有多种形态。是面向对象的第三大特征,多态是建立在封装和继承的基础之上的

方法的多态

方法的重写和重载体现多态

对象的多态

                1. 一个对象的编译类型和运行类型可以不一致
		2.编译类型在定义对象时,就确定了,不能改变
		3.运行类型是可以变化的
		4.编译类型看定义时 = 左边,运行类型看 = 右边

多态的注意事项

1.多态的前提是:两个对象存在继承关系
2.多态的向上转型

  1.本质:父类的引用指向了子类的对象  
  2.语法:父类类型 引用名 = new Cat();  
  3.可以调用父类中所有成员(需遵守访问权限)但不能调用子类特有的成员,因为在编译阶段,能调用哪  些成员,是由编译类型来决定的,最终效果看子类具体实现  

3.多态的向下转型

            语法: 子类类型 引用名 = (子类类型) 父类引用Cat cat = (Cat) animal;  
            1)只能强转父类的引用,不能强转父类的对象  
            2)要求父类的引用必须指向的是当前目标类型的对象  
            3)当向下转型后,可以调用子类类型中所有成员  

4.instanceOf是比较操作符,用于判断对象的类型是否为XX类型或XX类型的子类型

5.属性重写问题:属性没有重写之说,属性的值看编译类型

6.java的动态绑定机制

  1.当调用对象方法的时候,该方法会和该对象的内存地址/运行类型绑定(方法有)  
  2.当调用对象属性时,没有动态绑定机制,哪里声明,哪里使用(属性没有)