ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java学习笔记68——多态向下转型

2021-12-11 20:04:43  阅读:156  来源: 互联网

标签:Java 子类 void 多态 class fun 68 public


多态向下转型

多态的前提

​ 1、要有继承的关系
​ 2、子类要重写父类中的方法
​ 3、要有父类的引用指向子类对象

多态的弊端:

​ 多态无法使用子类特有的方法

class Father1{
    public void fun(){
        System.out.println("这是父类中的fun方法");
    }
}

class Son1 extends Father1{
    public void fun(){
        System.out.println("这是子类中的fun方法");
    }

    public void show(){
        System.out.println("这是子类中特有的show方法");
    }
}

public class PolymorphicDemo1 {
    public static void main(String[] args) {
        //多态创建子类对象
        Father1 f = new Son1();
        f.fun();//这是子类中的fun方法(多态与成员方法的关系:编译看左,运行看右)

        //需求:现在我想调用子类中特有的方法,咋办
        //f.show();
    }
}

需求:现在我想调用子类中特有的方法,咋办
f.show();

多态的弊端:
多态无法使用子类特有的方法

我就想使用子类特有的功能,能否使用? 能

使用子类特有功能的方法

1、创建对应的子类并调用方法

​ 可以,但是不推荐,很多时候会占用堆内存空间

class Father2 {
    public void fun() {
        System.out.println("这是父类的fun方法");
    }
}

class Son2 extends Father2 {
    public void fun() {
        System.out.println("这是子类的fun方法");
    }

    public void show() {
        System.out.println("这是子类的show方法");
    }
}


public class PolymorphicDemo2 {
    public static void main(String[] args) {
        Son2 son2 = new Son2();
        son2.show();

2、java提我们考虑到了这一点,提供了一个技术给我们使用:向下转型

​ 把父类的引用强制转换成子类的引用
​ 子类类名 变量名 = (子类类名)父类的引用

class Father2 {
    public void fun() {
        System.out.println("这是父类的fun方法");
    }
}

class Son2 extends Father2 {
    public void fun() {
        System.out.println("这是子类的fun方法");
    }

    public void show() {
        System.out.println("这是子类的show方法");
    }
}


public class PolymorphicDemo2 {
    public static void main(String[] args) {

        //多态创建子类对象(向上转型)
        Father2 f = new Son2();
        f.fun();

        //多态中的向下转型
        Son2 s = (Son2) f;
        s.show();
    }
}

对象之间转型的问题:

​ 1、向上转型
​ 其实就是多态创建对象的写法
​ Fu f = new Son();

​ 2、向下转型
​ Son s = (Son)f;

基本数据类型之间的强转:

​ int a = 10;
​ byte b = (byte)a;

向下转型的注意事项:

​ 要求必须是存在继承关系的

class Father2 {
    public void fun() {
        System.out.println("这是父类的fun方法");
    }
}

class Son2 extends Father2 {
    public void fun() {
        System.out.println("这是子类的fun方法");
    }

    public void show() {
        System.out.println("这是子类的show方法");
    }
}

class Demo{

}

public class PolymorphicDemo2 {
    public static void main(String[] args) {
        Father2 f = new Son2();
        
        Demo d = (Demo) f;//报错。Demo类与Father2类不存在继承的关系

    }
}

标签:Java,子类,void,多态,class,fun,68,public
来源: https://www.cnblogs.com/zhaoheng0530/p/15676815.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有