一、多态polymiorphism
多态:
多态指的是编译时类型变化,而运行时类型不变。
多态分两种:
编译时多态:编译时动态重载.
运行时多态:指一个对象可以具有多个类型
- 运行时多态的三原则:(应用时为覆盖)
- 对象不变;(改变的是主观认识)
- 对于对象的调用只能限于编译时类型的方法,如调用运行时类型方法就会报错。
Animal a=new Dog();对象a的编译时类型为Animal,运行时类型为dog。
注意:编译时类型一定要是运行时类型的父类(或者同类型)。
对于语句:Dog d=(Dog)a。将d强制声明为a类型,此时d为Dog(),此时d就可以调用运行时类型。注意:a和d指向同一对象。 - 在程序的运行时,动态类型判定。运行时调用运行时类型,即它调用覆盖后的方法。
二、封装Encapsulation
摘要:
类(Class)— 抽象的数据类型,用来描述某一类具有相同特性的对象。
类是一种复杂的数据类型,它是将不同类型的数据和与这些数据相关的操作封装在一起的集合体。这有点像C语言中的结构,唯一不同的就是结构没有定义所说的“数据相关的操作”,“数据相关的操作”就是我们平常经常看到的“方法”,因此,类具有更高的抽象性,类中的数据具有隐藏性,类还具有封装性。
封装的特点:
- 隐藏实现细节
- 为所有用户提供统一界面
- 增强可维护性
三、继承
- 是“is a” 的关系
- 声明的形式 :
public class Manager extends Employee {…}
- Java是一个单一继承的语言 ---- 一个类只有一个直接父类,如果没有声明父类,则默认的父类为java.lang.Object
特点
- 构造方法不能被继承
- 方法和属性可以被继承
- 子类的构造方法隐含的调用父类的默认构造方法
- 如果父类中没有默认的构造方法,则应该在子类的构造方法的第一行明确的声明调用父类中其他的构造方法。如下形式:
super(…)
四、方法的重载(重写)overloading
特点:
- 方法名相同
- 参数类型一定不同
- 返回值可以相同也可以不同
例如:
public class OverloadingTest {
public void print(int i) {}
public void print(float f) {}
public String print() {
return "Hello";
}
protected URL print(String s) throws
MalformedURLException {
return new URL(s);
}
}
五、方法的覆盖
特点:
- 方法名相同,参数类型相同,返回值也相同
- 访问权限不能更封闭
- 抛出异常类型不能更宽泛
六、权限
|Modifiers|Inside class|The same package|Subclass|other|
|:-|:-|:-|:-|:-|
|public|Yes|Yes|Yes|Yes|
|protected|Yes|Yes|Yes|No|
|Default|Yes|Yes|NO|No|
|private|Yes|No|No|No|