您的位置:首页 > 编程语言 > Java开发

多态--总结及举例

2016-06-07 08:40 435 查看
翻看了一些资料,对java中多态基本要点做一下总结,水平有限,欢迎指正!

------------------------------------------------------------------------------------------------------------------------------------
java引用变量的两个类型:编译时类型(由声明该变量时使用的类型决定)和运行时类型(由实际赋给该变量的对象决定)。

如果变量的编译时类型和运行时类型不同,就能出现多态。

例如:Person p = new Student();   //Person类是Student的父类;此处引用变量的编译时类型为Person,运行时类型为Student,表现出多态性。

把一个子类对象直接赋给父类引用变量时,当运行时调用该引用变量的方法时,其方法行为总是表现出子类方法的行为特征。

如下代码所示,分为三种情况:(1)子类继承自父类的方法被调用;(2)子类重写的父类的方法被调用;(3)子类自定义的方法被调用。

<span style="font-size:14px;">public class Person{
public String name="人类";
public void eat(){
System.out.println("吃吃吃");
}
public void study(){
System.out.println("学习常识");
}
}</span>

public class Student extends Person{
public String name="学生";

public void study(){
System.out.println("学习奥数");
}

public void exam(){
System.out.println("参加高考");
}

public static void main(String[] args) {
//编译时类型与运行时类型都为父类Person
Person p = new Person();
System.out.println(p.name); //人类
p.eat(); //吃吃吃
p.study(); //学习常识

//编译时类型与运行时类型都为子类Student
Student s = new Student();
System.out.println(s.name); //学生
s.eat(); //吃吃吃
s.study(); //学习奥数
s.exam(); //参加高考

//编译时类型为Person,运行时类型为Student
Person ps = new Student();
System.out.println(ps.name); //人类
ps.eat(); //吃吃吃
ps.study(); //学习奥数
//ps.exam();
//报错:the method exam() is undefined for the type Person
Student stu = (Student)ps; //强制类型转换
stu.exam(); //参加高考
}
}<span style="font-family: 'Microsoft YaHei'; background-color: rgb(255, 255, 255);"> </span>
注意其中ps.name输出的依旧是“人类”,对象的实例变量不具备多态性,因此不是输出“学生”。

总结:java引用变量只能调用编译时类型的方法,不能调用运行时类型的方法,如果需要调用运行时类型方法,需要使用(type)进行强制类型转换,通常在此之前用instanceOf()进行类型检查。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 多态