关于封装、继承、多态、重载
学C#和java也一年了,前天被老师叫起来回答什么是多态时竟有些含糊不清,下来后细细一想,发现自己对这些面向对象的基本概念并未理解透彻。根据自己的理解,抽了点时间整理了一下:
封装:简单的解释就是把现实世界里面的某个功能封装到一个类或者方法里面。类就是一个盒子,黑盒子,我开了几个口子,每个口子负责不同的任务。
继承:就是子类可以拥有父类和子类的方法和属性。类可以继承自(extends)类(包括抽象类)和 (implements) 接口,接口只能继承自(extends)接口。一个普通类继承一个接口后必须实现这个接口中定义的所有方法,否则就只能被定义为抽象类(抽象类继承自抽象类或实现接口时,可以部分或者全部实现父类抽象类的抽象方法或父类接口中的借口)。类和接口都只能继承自一个类,但可以继承自多个接口。
多态:就是父类的多个子类可以重写子类的某个方法,可以产生自己的功能行为,即:一种类型表现出多种状态。
重载:是针对方法的。在同一个类中,构建一个方法名相同,参数个数、类型、顺序不同,返回值修饰符不同的方法叫做方法地重载。
转自:http://psl19892010.iteye.com/blog/964639
==============================================
以下来自另一文
==============================================
继承、重载、覆盖、多态
1、继承(inheritance)
一旦你已经创建了一个定义了对象一般属性的超类,该超类可以被继承以生成特殊用途的类。每一个子类只增添它自己独特的属性。这是继承的本质。Java 不支持多超类的继承。
超类变量可以引用子类对象(这个具体有什么作用,有待补充)
2、重载(overload)
a)、方法重载要求参数类型或个数必须不一致
b)、对返回类型无限制
c)、对于继承来说,如果某一方法在父类中的访问权限是priavte,那么就不能在子类对其进行重载,如果定义的话,也只是定义了一个新方法,而不会达到重载的效果。
3、覆盖(override)
从字面就可以知道,它是覆盖了一个方法并且对其重写,以求达到不同的作用。对我们来说最熟悉的覆盖就是对接口方法的实现,在接口中一般只是对方法进行了声明,而我们在实现时,就需要实现接口声明的所有方法。除了这个典型的用法以外,我们在继承中也可能会在子类覆盖父类中的方法。在覆盖要注意以下的几点:
a)、要求父类和子类的方法名称、参数相同
b)、子类中覆盖的方法的访问权限要>=父类中的方法的访问权限(default、protected、public)。
c)、子类中覆盖的方法的返回值必须和父类中的方法的返回一致;
d)、子类中覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类;
e)、被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。
f)、静态方法和最终方法(带关键字final的方法)不能被覆盖(“实例方法被覆盖,静态方法被隐藏”)
g)、抽象方法必须在具体类中被覆盖
4、多态(polymorphism)
多态性的概念也可以被说成“一个接口,多个方法”。Java实现运行时多态性的基础是动态方法调度,它是一种在运行时而不是在编译期调用重载方法的机制。
多态的通常含义是能够呈现出多种不同的形式或形态,即一个特定类型的变量可以用于引用不同类型的对象,并且自动调用该变量引用的特定类型对象的方法,这样就使得一个方法的调用根据该调用所作用到的不同对象类型而响应不同的操作。
学C#和java也一年了,前天被老师叫起来回答什么是多态时竟有些含糊不清,下来后细细一想,发现自己对这些面向对象的基本概念并未理解透彻。根据自己的理解,抽了点时间整理了一下:
转自:http://psl19892010.iteye.com/blog/964639
==============================================
以下来自另一文
==============================================
继承、重载、覆盖、多态
1、继承(inheritance)
2、重载(overload)
3、覆盖(override)
4、多态(polymorphism)