继承,封装,多态,抽象

来源:互联网 发布:决战武林地煞进阶数据 编辑:程序博客网 时间:2024/05/22 19:11

继承

一,为什么需要继承?

第一好处:继承的本质在于抽象。类是对对象的抽象,继承是对某一批类的抽象。

第二好处:为了提高代码的复用性。

二,如何实现继承?

使用extends关键字,extends的意思是“扩展”。子类是父类的扩展。

三,注意事项

1,java中只有单继承(一个类只能有一个直接父类),没有像c++那样的多继承,多继承会引起混乱,使得继承链过于复杂,系统难以维护。
2,java中的多继承可以通过接口来实现。
3,如果定义一个类时,没有调用extends,那么它的父类是java.lang.Object

四,方法的重写

1,重写方法必须和被重写方法具有相同方法名称,参数列表和返回类型。
2,重写方法不能使用比被重写方法更严格的访问权限(由于多态)。
3,子类的返回值类型小于等于父类的返回值类型。

五,Object类

是所有类的父类,里面含有toString(),equals()等方法,其中toString得到的是包名+类型+”@“+地址哈希码。 其返回值是 String 类型,描述当前对象的有关信息。
在进行String与其它类型数据的连接操作时(如:System.out.println(“info”+person)),将自动调用该对象类的 toString()方法。

//Object类中toString方法的源代码是:public String toString() {   return getClass().getName() + "@" + Integer.toHexString(hashCode());}

equals()方法不同类有不同的实现,有的只需要内容相同有的还需要对象相同。

//Object类中的equals方法源代码可以看出:public boolean equals(Object obj) {    return (this == obj);}

六,super()

直接父类对象的引用。
可以通过super访问父类中被子类覆盖的方法或属性。

//例如构造方法:public Animal() {    super();//调用父类的构造方法,只能位于第一句     ...}

七,继承与组合

从代码复用的角度来看,组合可以替代继承。

组合:不需要继承,只需要在类中持有另一个类的引用即可。

从建模的角度来看,继承是”is a”关系,意思为:是…
组合是”has a”关系,意思为:包含,有…

封装

一,为什么需要封装?

隐藏对象内部的复杂性,只对外公开简单的借口,便于外接调用,从而提高系统的可扩展性,可维护性。

程序设计追求的是”高内聚,低耦合“。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合:仅暴露少量的方法给外部使用。

二,封装需要的权限设置

引用块内容

三,封装的使用细节

1,static常量可以用public,其余一般都用private
(提供相应的get/set方法来访问相关属性. 这些方法通常是public,从而提供对属性的读取操作。 (注意:boolean变量的get方法是用:is开头!)
2, 一些只用于本类的辅助性方法可以用private,希望其他类调用的方法用public。

多态

一,定义

多态性是OOP中的一个重要特性,主要是用来实现动态联编的,换句话说,就是程序的最终状态只有在执行过程中才被决定而非在编译期间就决定了。这对于大型系统来说能提高系统的灵活性和扩展性。

多态可以让我们不用关心某个对象到底是什么具体类型,就可以使用该对象的某些方法,从而实现更加灵活的编程,提高系统的可扩展性。

二,为什么需要多态

多态性是指允许不同类的对象对同一消息作出不同的响应。

三,java中如何实现多态?

引用变量的两种类型:

编译时类型(模糊一点,一般是一个父类)由声明时的类型决定。运行时类型(运行时,具体是哪个子类就是哪个子类)由实际对应的对象类型决定。通过动态绑定调用该对象的方法。动态绑定会使我们的程序编写更加灵活,但是会减慢程序运行速度。这也是JAVA比C++/C慢的主要原因之一。

多态:如果编译时类型和运行时类型不一致,就会造成多态。

四,方法绑定

方法绑定(method binding)

执行调用方法时,系统根据相关信息,能够执行内存地址中代表该方法的代码。分为静态绑定和动态绑定。

静态绑定:

在编译期完成,可以提高代码执行速度。

动态绑定:

通过对象调用的方法,采用动态绑定机制。 这虽然让我们编程灵活,但是降低了代码的执行速度。这也是JAVA比C/C++速度慢的主要因素之一。 JAVA中除了final类、final方、static方法,所有方法都是JVM在运行期才进行动态绑定的。

五,多态的使用特点

  1. 多态是方法的多态,属性没有多态性。

  2. 编写程序时,如果想调用运行时类型的方法,只能进行类型转换。不然通不过编译器的检查。但是如果两个没有关联的类进行强制转换,会报:ClassCastException。 比如:本来是狗,我把它转成猫。就会报这个异常。

  3. 多态的存在要有3个必要条件:要有继承,要有方法重写,父类引用指向子类对象

六,对象的转型

为什么需要强制转换类型?

引用变量只能调用它编译类型的方法,不能调用它运行类型的方法。这时,我们就需要进行类型的强制转换!

1,一个父类的引用类型变量可以“指向”其子类的对象。

2,一个父类的引用不可以访问其子类对象新增加的成员(属性和方法)。

3,可以使用 引用 变量 instanceof 类名 来判断该引用型变量所“指向”的对象是否属于该类或该类的子类。

4,子类的对象可以当作基类的对象来使用称作向上转型(upcasting),反之称为向下转型(downcasting)

抽象

一,抽象方法

只声明了方法,同时使用了abstract修饰,没有方法体!必须要子类来重写!

二,抽象类

可以避免子类设计的随意性,将设计和实现分开。

三,注意事项

1,有抽象方法的类只能定义抽象类。
2,抽象类不能实例化,即不能用new来实例化抽象类。
3,抽象类可以包含属性,方法,构造方法。
4,抽象类只能用来继承。
5,抽象方法必须被子类实现。

0 0
原创粉丝点击