多态、类型转换

什么是多态?
●多态是在继承/实现情况下的一种现象,表现为:对象多态、行为多态。

多态的具体代码体现
 People p1= new Student ();
p1.run();
 People p2= new Teacher ();
p2.run();
多态的前提
●有继承/实现关系;存在父类引用子类对象;存在方法重写。
多态的一个注意事项
●多态是对象、行为的多态, Java 中的属性(成员变量)不谈多态。 

自动类型转换:父类变量名= new 子类();
强制类型转换:子类变量名=(子类)父类变量
强制类型转的一个注意事项
●存在继承/实现关系就可以在编译阶段进行强制类型转换,编译阶段不会报错。
●运行时,如果发现对象的真实类型与强转后的类型不同,就会报类型转换异常(ClassCastException )的错误出来。

People p = new Teacher ();
 Student s =( Student ) p ;// java . Lang . ClassCastException 
强转前, Java 建议:
.使用 instanceof 关键字,判断当前对象的真实类型,再进行强转。
 p instanceof Student

1、使用多态有什么好处?存在什么问题?
可以解耦合,扩展性更强;使用父类类型的变量作为方法的形参时,可以接收一切子类对象。·多态下不能直接调用子类的独有方法。
2、类型转换有几种形式?能解决什么问题?
自动类型转换、强制类型转换。
可以把对象转换成其真正的类型,从而解决了多态下不能调用子类独有方法的问题。
3、强制类型转换需要注意什么?
存在继承/实现时,就可以进行强制类型转换,编译阶段不会报错。
但是,运行时,如果发现对象的真实类型与强转后的类型不同会报错( ClassCastException )。
4、强制类型转换前? Java 建议我们做什么事情?
使用 instanceof 判断当前对象的真实类型:对象 instanceof 类型。

package com.xinbao.d1_polymorghism;

public class People {
    String name = "父类";
    public void run(){
        System.out.println("人会跑");
    }
}
package com.xinbao.d1_polymorghism;

public class Teacher extends People{
    String name = "老师";
    @Override
    public void run() {
        System.out.println("老师跑的比较慢~~");
    }
    public void teach(){
        System.out.println("老师教java");
    }
}
package com.xinbao.d1_polymorghism;

public class Student extends People{
    String name = "学生";
    @Override
    public void run() {
        System.out.println("学生跑的飞快~~");
    }

    public void study(){
        System.out.println("学生学Java");
    }
}
package com.xinbao.d1_polymorghism;

public class Test2 {
    public static void main(String[] args) {
        //目标:掌握多态的好处
        People p1 = new Student();//解耦合,便于维护
        p1.run();

        Student s = new Student();
        go(s);

        Teacher t = new Teacher();
        go(t);

    }

    public static void go(People p){
        System.out.println("开始----------------");
        p.run();
        //p.teach();//错误
        //p.study();//错误
        if (p instanceof Student) {
            Student s = (Student) p;//强制类型转换,父类强转成子类
            s.study();
        } else if (p instanceof Teacher){
            Teacher t = (Teacher) p;
            t.teach();
        }
        System.out.println("结束----------------");
    }
}

E:\JVsoft\Java\jdk-17\bin\java.exe -javaagent:E:\JVsoft\IntelliJIDEA2021.1.1\lib\idea_rt.jar=37159:E:\JVsoft\IntelliJIDEA2021.1.1\bin -Dfile.encoding=UTF-8 -classpath E:\JVsoft\code\out\production\oop-app4 com.xinbao.d1_polymorghism.Test2
学生跑的飞快~~
开始----------------
学生跑的飞快~~
学生学Java
结束----------------
开始----------------
老师跑的比较慢~~
老师教java
结束----------------

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值