利用抽象数据类型,将数据和基于数据的操作封装在一起,构成一个实体,将数据和操作细节隐藏在内部,在程序中控制对象的数据及行为的访问级别,用户不需要知道对象内部的细节,可以直接通过对象对外提供的接口来访问对象。
优点:
继承实现了IS-A关系,集成遵循里氏替换原则,子类对象必须能够替换掉所有父类对象。子类可以继承父类的非private的属性和方法。
多态分为运行时多态和编译时多态。
满足以下三个条件就会触发运行时多态
下述代码中,动物类(Animal)有两个子类,猫(Cat)和狗(Dog),都重写了父类的eat()方法,在方法中,使用了Animal作为引用对象类型来引用Cat和Dog对象,调用方法时,会调用实际对象类型的eat方法而不是Animal的eat方法
public class Animal {
public void eat(){
System.out.println("动物在吃东西");
}
}
public class Cat extends Animal{
@Override
public void eat(){
System.out.println("猫在吃东西");
}
}
public class Dog extends Animal{
@Override
public void eat(){
System.out.println("狗在吃东西");
}
}
public class TestExtends {
public static void main(String[] args){
List<Animal> animalList = new ArrayList<>();
Animal cat = new Cat();
Animal dog = new Dog();
animalList.add(cat);
animalList.add(dog);
animalList.forEach(Animal::eat);
}
}
输出结果如下
类图是UML图形之一,用来描述类的特性以及类之间的静态关系。
类的静态关系: