多态
多态可以实现java程序中的动态编译,提高可扩展性。
多态的含义是”一种定义,多种实现“,顾名思义,就是实现多功能的目的。就像"+"号,当和数字在一起时,就代表将两个数相加,当和字符串在一起时,代表将两者相连。
即同一方法可以根据发送对象的不同而采用多种不同的行为方式。
一个对象的实际类型是确定的,但可以指向对象的引用类型有很多。
多态是建立在继承的重写之上的,在子类重写父类的方法后,才会产生多态,所以只有方法有多态,属性是没有多态的。
父类引用,指向子类的类型(向上转型)
在初期实例化时,通过 A a = new A;的方式创建对象。这里的a只是指向 "="符号后面的这个A的对象,相当于用new产生了一个对象,给这个对象起一个名字叫a, 或者起任何名字。而反之a也可以用来命名其他的对象,所以,在A类产生一个子类 B类的时候,就可以通过父类直接指向子类 A a = new B; 这样这里原本指向A类对象的a就变为指向子类对象B了。
这里 A a = new B; "A"是引用类型,"B"是实际类型,在new B 的时候,实际类型是确定了的,就是创建B的对象,但引用类型就不确定了,所以可以用父类a 来指向子类 B。
显示类型转换(向下转换)
需要注意!!父类可以直接指向子类,但子类不能直接指向父类。
父类
package oop.Demo05;
public class Person {
public void run(){
System.out.println("父类");
}
}
子类
package oop.Demo05;
public class Student extends Person{
测试类
package oop;
import oop.Demo05.Person;
import oop.Demo05.Student;
public class Application {
public static void main(String[] args) {
Person f = new Student();//父类引用指向子类
Student s = new Student();
Object g = new Student();//Object是所有类的父类,所以也是父类指向子类
((Student)f).name();//将person强行转换为Student类型。输出结果 zilei
s.name();//输出结果 zilei
f.run();//由于子类重写了父类的run方法。所以输出结果 子类
s.run();//输出结果 子类
}
}