JAVA多态与类型转化分析-------》域没有多态性

2021/4/10 1:27:30

本文主要是介绍JAVA多态与类型转化分析-------》域没有多态性,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一、多态性:

超类(即基类或父类)引用在运行时既能代表超类本身的对象,

也能代表其子类(即派生类)的对象的能力。

类的一个成员若想表现多态必须可以被覆盖:

对于成员变量而言,不会发生覆盖现象(会隐藏),在子类出现相同变量的定义时只会隐藏父类变量,

因此不会表现多态。同时变量调用在编译时就会解析,不符合动态绑定的特征;

在成员方法中,静态方法和final方法,private方法 也不会发生覆盖现象(会隐藏),因此也不会表现多态性。

因此只有除静态方法和final,private 方法以外的方法才会表现多态性

二、向上类型转化时:
丢失添加的方法和字段,剩余的为:
基类字段
基类静态方法或final方法 //前二者为不能被覆盖的成员,因此保留,无多态性
基类其他方法(若被子类覆盖则为子类覆盖的新方法)

下边看一个例子:

/**
     * 父类
     * @author LIMING
     */
    public class fa {
        public int filed = 0;
        public int getFiled() {
            return filed;
        }
        public int getfaFiled() {
            return 99;
        }
    }


/**

     * 子类
     * @author LIMING
     */
    public class son extends fa {
        public int filed = 1;
        public int sonfiled = 22;
        //覆盖父类方法
        public int getFiled() {
            return filed;
        }
        public int getsonFiled() {
            return 88;
        }
        public static void main(String[] args) {
            
            fa fa = new son();//上溯造型
            System.out.println(fa.filed);//调用父类的字段 输出结果为父类的内容 不是子类的
            System.out.println(fa.getFiled());//调用父类的方法 但是子类有覆盖 所以这里的输出是1 也就是动态  调用的是子类的方法
            System.out.println(fa.getfaFiled());//这个是调用的父类的方法  子类没有覆盖
            //上溯之后子类的方法会丢失  所以不能调用子类的方法
        }
    }


//共勉!




这篇关于JAVA多态与类型转化分析-------》域没有多态性的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程