指的是对象的一种形态
public class Person{}//Person父类
public class Student extends Person{}//Student子类
public class Teather extends Person{}//teather子类
1.本态:声明是的数据类型与实例化的数据类型一致
Person p=new Person;
Student s=new Student;
Teather t=new Teather;
2.多态:声明时数据类型是实例化的对象父类类型
声明的是父类类型,但实例化的是子类类型
Person p=new Teather();
Person p1=new Student();
//子类的引用对象不能指向父类
Teather t=new Person();//error
Student s=new Person();//error
Student s1=new Teather();//error
Teather t1=new Student();//error
在编译时,使用父类编译,如果父类中没有相应的成员,那么编译不通过
在运行时,使用子类类型 ( 执行时调用的是子类的成员)
3.向上转型:
父类引用指向子类的实例化
//本态转多态
Person p=new Person();
Student s=new Person();
Teather t=new Teather();
p=s; //Person p=new Student();
p=t; //Person p=new Teather();
4.向下转型:
由多态转向本态
--将父类的实例化对象赋值给对应的子类引用并进行类型强制转换
--可以调用父类中独有的成员
Person p=new Student();
Teather t=(Teather)p;//声明的数据类型必须与指定对象的实际数据类型一致
5 instanceof关键字
判断指定的对象是否为指定的数据类型
实现对多态的向下转型,能够调用子类对象中的独有的方法
public void testInstanceof(Person p)//方法的参数类型必须是父类类型
{
if(p instanceof Student)//Person p=new Student()
{
Student s=(Student)p;
s.subStudent();//可以调用子类Student中独有的成员方法;
}
else if(p instanceof Teather)
{
Teather t=(Teather)p;
t.test2();
}
else
{
p.teat();
}
}
6 多态方法声明的返回值
为父类类型,但实际上返回的数据类型为子类类型-成员方法的返回类型
7.多态方法重写的返回类型
子类中重写父类的方法且声明有返回类型时
针对方法的返回类型:子类中声明的返回类型必须是父类中被重写方法返回类型的本类类型或者子类类型
本文详细介绍了Java中的面向对象特性,包括类与对象、继承和多态的概念。通过实例展示了多态的四种形态:本态、多态、向上转型和向下转型,并解释了`instanceof`关键字的作用。此外,还探讨了多态方法的返回类型和重写规则,以及在实际编程中的应用。
2716

被折叠的 条评论
为什么被折叠?



