封装
封装是保证软件部件具有优良的模块性的基础,封装的主要作用是实现软件部位的“高内聚,低耦合”,防止程序相互依赖而带来的影响,封装主要是将对象的方法和属性封装到一个模块中,将这个模块中的属性私有化,只有这个类的方法和属性才能访问这个类的属性,这就基本实现了类的封装。封装分为封和装的两个步骤,装即将对象的属性和方法封装到一个类中,封即将对象的属性私有化,并且提供get/set方法以用来外部访问
继承:在定义一个和实现一个类的时候,可以在一个已经存在的类的基础上来进行,把已存在的类定义的内容作为自己的内容,并可以加入自己新的内容,或修改已定义的方法,让他更适合自己的需要,继承主要继承的是类的方法和属性,方法主要是对方法使用权限的继承,并不是对代码片段的继承,属性的继承,即是对成员变量的拷贝,是对内存空间的拷贝(堆内存)。
多态( 在Java中有两种形式可以实现多态。继承和接口。)
多态存在的三个必要条件
先介绍一下:
重载:
Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法, 这就是多态性。
子类重载父类方法
* 父类中不存在该方法,向上转型后,父类是不能引用该方法的
重写:直接重写父类里面的的方法
子类重写父类方法
* 指向子类的父类引用调用fun2时,必定是调用该方法
1、要有继承;
2、要有重写;
3、父类引用指向子类对象。
指向子类的父类引用由于向上转型了,它只能访问父类中拥有的方法和属性,而对于子类中存在而父类中不存在的方法,该引用是不能使用的,尽管是重载该方法。
Animal a = new Dog();
在这里我们这样理解,这里定义了一个 Animal 类型的a,它指向 Dog 对象实例。由于Dog 是继承 Animal,所以 Dog 可以自动向上转型为Animal,所以 a 是可以指向Dog 实例对象的。这样做存在一个非常大的好处,在继承中我们知道子类是父类的扩展,它可以提供比父类更加强大的功能,如果我们定义了一个指向子类的父类引用类型,那么它除了能够引用父类的共性外,还可以使用子类强大的功能。
但是向上转型存在一些缺憾,那就是它必定会导致一些方法和属性的丢失,而导致我们不能够获取它们。所以父类类型的引用可以调用父类中定义的所有属性和方法,却不能调用子类中的方法和属性。
若我们向调用子类中的方法怎么办呢?这就利用到了“向下转型”,在代码中的体现就是:
Cat c = (Cat)a;//向下转型
c.catchMouse();
指向子类的父类引用由于向上转型了,它只能访问父类中拥有的方法和属性,而对于子类中存在而父类中不存在的方法,该引用是不能使用的,尽管是重载该方法。若子类重写了父类中的某些方法,在调用该些方法的时候,必定是使用子类中定义的这些方法(动态连接、动态调用)。