Java学习第十五天 多态

即同一方法可以根据发送对象的不同而采用多种不同的行为方式。一个对象的实际类型是确定的(new Student()、new Person() ),但可以指向对象的引用的类型有很多。

多态存在的条件

  1. 有继承关系
  2. 子类重写父类方法
  3. 父类引用指向子类对象

直接看代码:

Application(主类):

package com.oop.demo07;

public class Application {
    public static void main(String[] args) {
//        一个对象的实际类型是确定的
//        new Student():
//        new Person();
//        可以指向的引用类型就是不确定的

//        Student也就是子类,能调用的方法都是自己的或继承过来的

        Student s1 = new Student();
//        Person类也就是父类,可以指向子类,但无法调用子类独有的方法
        Person s2 = new Student();
        Object s3 = new Student();
//        得出结论,对象能执行哪些方法,主要看的是左边,和右边关系不大
        //        如果子类有重写父类的方法就调用子类的,没有调用父类的
        s1.run();
        s1.say();
        s2.run();

//        如果父类要调用子类独有的方法,会进行强制转换
        ((Student)s2).say();

    }
}

Person类(父类):

package com.oop.demo07;

public class Person {
    public void run(){
        System.out.println("跑");
    }
}

Student类(子类):

package com.oop.demo07;

public class Student extends Person{
    public void run(){
        System.out.println("跑啊");
    }
//     子类独有的方法
    public void say(){
        System.out.println("说");
    }
}

注释有点多,一步一步来看:

 

 =

运行结果:

得出结论:

对象能执行哪些方法,主要看的是左边,和右边关系不大,s1能输出是因为继承了父类的方法。

如果子类重写了父类的方法:

输出结果就为子类的:

 

得出结论:

Student也就是子类,能调用的方法都是自己的或继承过来。
如果子类有重写父类的方法就调用子类的,没有调用父类的。

但是父类却调用不了子类独有的方法:

原因是在Java中,父类是无法调用子类独有的方法的。

如果强制调用,IDEA就会自动进行类型转换:

总结一下:

一个对象的实际类型是确定的
new Student():
new Person();
可以指向的引用类型就是不确定的

Student也就是子类,能调用的方法都是自己的或继承过来的

Person类也就是父类,可以指向子类,但无法调用子类独有的方法

对象能执行哪些方法,主要看的是左边,和右边关系不大

多态的注意点:

  1. 多态是方法的多态,属性没有多态
  2. 父类和子类,有联系类型转换异常! ClassCastException !
  3. 存在条件: 继承关系,方法需要重写,父类引用指向子类对象! Father f1= new Son
     

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

芝麻干

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值