多态与instanceof关键字

本文详细介绍了Java中的面向对象特性,包括类与对象、继承和多态的概念。通过实例展示了多态的四种形态:本态、多态、向上转型和向下转型,并解释了`instanceof`关键字的作用。此外,还探讨了多态方法的返回类型和重写规则,以及在实际编程中的应用。

       指的是对象的一种形态

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.多态方法重写的返回类型

子类中重写父类的方法且声明有返回类型时

针对方法的返回类型:子类中声明的返回类型必须是父类中被重写方法返回类型的本类类型或者子类类型

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值