Java面向对象编程之封装、继承、多态

封装(encapsulation)

类使得数据和对数据的操作集合在一起,从而对使用该类的其他人来说,可以不用管它的具体实现,而只要知道它的功能,从而实现所谓的信息隐藏。

继承(inheritance)

继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或者新的功能,也可以使用父类的功能,但不能选择性的继承父类。这样是代码的复用变得十分简单,能够大大缩短开发周期,降低开发费用。比如可以先定义一个类叫车,车有以下属性:车体大小,颜色,方向盘,论坛,而又由车这个类派生出教程和卡车两个类,为轿车添加一个小后备箱,而为卡车添加一个大货箱。

多态(polymorphism)

多态又分为设计时多态和运行时多态,例如重载又被称为设计时多态,而对于覆盖或继承的方法,JAVA运行时系统根据调用该方法的实例类型来决定选择调用哪个方法则被称为运行时多态。总而言之,面向对象的设计的典型特点就是继承,封装,多态,这些特点是面向对象之所以能如此盛行的关键所在。

方法与属性的分配:

如果一个类包含了属性和方法,那么该类的每一个对象都有自己的属性,但是无论有多少个对象,这些对象共享一个方法。

重载:

1、在使用重载时只能通过相同的方法名、不同的参数形式实现。不同的参数类型可以是不同的参数类型,不同的参数个数,不同的参数顺序(参数类型必须不一样);
2、不能通过访问权限、返回类型、抛出的异常进行重载;
3、方法的异常类型和数目不会对重载造成影响;

继承关系中构造方法的调用:

生成子类对象时,Java默认地首先调用父类的不带参数的构造方法,并执行该构造方法,生成父类的对象。接下来才是调用子类的构造方法,生成子类的对象。(即是想要生成子类对象,必须先生成父类的对象,没有父类的对象就没有子类的对象)

继承中父类与子类的关系:

① 父类有的,子类也有
② 父类没有的,子类可以有
③ 父类有的,子类可以改变

继承中需要注意的:

① 构造方法不能被继承
② 方法和属性可以被继承
③ 子类的构造方法隐式地调用父类的无参构造方法
④ 当父类没有不带参数的构造方法时,子类需要使用super关键字来显示调用父类的构造方法。super指的是父类的引用
⑤ super关键字必须是构造方法中的第一句。

继承中的方法重写:

1、重写方法的参数列表必须完全与被重写的方法的相同,否则不能称其为重写而是重载.

2、重写方法的访问修饰符一定要大于被重写方法的访问修饰符(public>protected>default>private)。

3、重写的方法的返回值必须和被重写的方法的返回一致;

4、重写的方法所抛出的异常必须和被重写方法的所抛出的异常一致,或者是其子类;

5、被重写的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行重写。

6、静态方法不能被重写为非静态的方法(会编译出错)。

多态中的两种类型转换:

① 向上类型转换(upcast):将子类型转换成父类型。对于向上类型转换,不需要显示指定:

     Parent p = new Child();

② 向下类型转换(downcast):将父类型转换为子类型。对于向下类型转换,必须要显示指定,使用强制类型转换:

    Parent p = new Child();
    Child child = (Child)p;

以下的编译不会出错,运行时报错:

    Parent p = new Parent();
    Child child = (Child)p;

 

除非注明,饮水思源博客文章均为原创,转载请以链接形式标明本文地址

本文地址:http://www.alonemonkey.com/java-oop.html

本文链接:http://www.alonemonkey.com/java-oop.html