多态是面向对象的基本特征之一。
多态的特征:
一.引用类型可以是实际对象类的父类
如,book 是paper的子类,那么如此成立: paper pp = new book();
引用对象是实际对象的父类,执行的操作是子类的方法或者子类的实例变量(满足继承的自底向上原则)。但是无法执行子类独有的类。如eat();
public class Student extends Person{
public void bark(){
System.out.println("come come come");
}
public void eat(){
System.out.println("eat eat eat");
}
public static void main(String[] args) {
Person ps = new Student();
ps.bark();
}
}
class Person{
String name;
int age;
public void bark(){
System.out.println("go go go ");
}
}
很明显,子类Student继承Person,引用对象是Person类,但实际对象是Student类,执行的Student类的方法。以下是执行结果:
二.接口与抽象类
抽象类:1.无法被构造器实例化的类,顾名思义,抽象的,你能把paper材料,用途说出来吗?它只能用来继承,标志是abstract,形如: public abstract Animal{},2.里面至少有一个抽象方法, 形如:abstract void bark();->没有中括号;
3.抽象类不能初始化,如 Animal anm = new Animal();不存在的;4.继承抽象类的子类必须覆盖父类中的抽象类;
引申->JAVA中所有的类都继承Object这个万能类;还有一种强制转换类型,如Student st = (Student)ps;
接口:接口是100%的抽象类,没有实例变量,只有抽象方法,关键字interface implements;
类来自单亲家庭(extends),但是可以扮演多重角色(implements);