栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java 面向对象编程 多态

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java 面向对象编程 多态

多态
  • 基本介绍:

    方法或对象具有多种形态。多态是建立在封装和继承基础之上的

  • 多态的具体表现

    (1)方法多态:方法重载就是典型的方法多态

    (2)对象的多态:(核心 )

    ①一个对象的编译类型和运行类型可以不一致

    ②编译类型在定义对象时就确定了,不能改变

    ③运行类型是可以变化的

    ④编译类型看定义时 = 的左边,运行类型看 = 右边

  • 细节和各种注意事项

    多态的前提是:两个对象(类)之间存在继承关系

多态的向上转型

(1)本质:父类的引用指向了子类

(2)语法:父类类型 引用名 = 子类类型

(3)特点:编译类型看左边,运行类型看右边

可以调用父类中的所有成员(须遵守访问权限)

不能调用子类中特有成员

多态的向下转型

(1)语法:子类类型 引用名 = (子类类型)父类引用

(2)只能强转父类的引用,不能强转父类的对象

(3)要求父类的引用必须指向的是当前目标类型的对象

(4)当向下转型后,可以调用子类类型中所有的成员

!!!属性没有重写这个说法,直接看编译类型

例:

public class Test {
    public static void main(String[] args){
       base base = new num();
       System.out.println(base.count);
    }
}
class base{
    public int count = 10;
}
class num extends base {
    public int count = 100;
}
//输出的结果是 10
  • instanceof比较操作符,用于判断对象的运行类型是否为XX类型或XX类型的子类型

public class Test {
    public static void main(String[] args){
       base base = new num();
        System.out.println(base instanceof num);//true()
        System.out.println(base instanceof base);//true
    }
}
class base{}
class num extends base {}

练习:

判断下面的每条语句,说出原因

public class PolyExercise01{
    public static void main(String args){
        double d = 13.4;//ok
        long l = (long)d;//ok double-->long可以自动转换
        System.out.println(l);
        int in = 5;//ok
        boolean b =(boolean)in;//false 不能把一个int型转化为boolean型
        Object obj = "hello";//ok 向上转型,把String型转为了Object
        String objStr =(String)obj;//ok ,向下转型
        System.out.println(objStr);
        
        Object objPri = new Integer(5);//ok ,向上转型
        String str = (String)objPri;//false , objPri已经指向了integ,强转不过来
        integer str1 = (Integer)objPri;//ok向下转型
    }
}

java动态绑定机制(!!!!重中之重)

(1)当调用对象方法时,该方法回合该对象的内存地址/运行类型绑定

(2)当调用对象属性时,没有动态绑定机制,那里声明那里使用。

public class Test {
    public static void main(String[] args){
       D a = new E();
        System.out.println(a.display());
    }
}
class D{
    public int count = 10;
    public int display(){
        return get1()+20;
    }
    public int get1(){
        return count;
    }
}
class E extends D{
    public int count = 100;

//    public int display() {
//        return get1();
//    }
    public int get1(){
        return count;
    }
}//输出 120 
//!!!只要是方法,就去子类中找,只要是属性,就在本类中找

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/571828.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号