zoukankan      html  css  js  c++  java
  • 多态的使用和向上向下转型

    补充知识点:1.一个java文件中只能有一个公共类(公共类名必须和这个JAVA源程序文件名相同)

          2.如果是继承的话,只能继承一个类,但可以继承多个接口。

    多态==晚绑定 实质就是父类型的引用可以指向子类型的对象。

          Parent p = new Child();//向上转型

        当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;

        如果有,调用子类的方法

    例如

     1 class animal{
     2     protected void show()
     3     {
     4         System.out.println("this is animal");
     5     }
     6 }
     7 
     8 class dog extends animal{
     9     public void show(){
    10         System.out.println("this is dog");
    11     }
    12 }
    13 public class basic {
    14     public static void main(String[]  args){
    15         animal a = new dog();//这里new的是dog,就调用dog里面的同名方法
    16         a.show();
    17     }
    18 }
    View Code

    运行结果 this is dog

    向上转型:animal a = new dog();

    向下转型:注意1.父类型的引用必须指向子类的对象,指向谁才会转换谁,不然编译出错,例如

    public class basic {
        public static void main(String[]  args){
            animal a = new animal();
            dog d =(dog)a;
            d.show();
        }
    }
    View Code

    出错:Exception in thread "main" java.lang.ClassCastException: animal cannot be cast to dog

    at basic.main(basic.java:18)

    public class basic {
        public static void main(String[]  args){
            animal a = new dog();
            dog d =(dog)a;
            d.show();
        }
    }
    View Code

    正确;       2.必须使用强制类型转换

    总结:多态存在必须有继承、方法覆盖、父类引用指向子类对象三个条件

     特别的:向上转型中存在静态方法,调用的是自己的本身的静态方法,不管new 的是什么,只看引用类型,即,谁定义,谁调用

    class animal{
        protected static void show()
        {
            System.out.println("this is animal");
        }
    }
    
    class dog extends animal{
        public static void  show(){
            System.out.println("this is dog");
        }
    }
    public class basic {
        public static void main(String[]  args){
            animal a = new dog();//静态方法 调用的是animal,非静态调用的是dog
            a.show();
        }
    }
    View Code

    结果:this is animal

     1 import java.util.*;
     2 
     3 class animal{
     4     protected static void show()
     5     {
     6         System.out.println("this is animal");
     7     }
     8 }
     9 
    10 class dog extends animal{
    11     public static void  show(){
    12         System.out.println("this is dog");
    13     }
    14 }
    15 public class basic {
    16     public static void main(String[]  args){
    17         animal a = new dog();//前面的例子已经说明这里的向下转型不能 new animal
    18         dog d = (dog)a;
    19         d.show();//谁定义谁调用
    20         
    21     }
    22 }
    View Code

    结果:this is dog

  • 相关阅读:
    Civil 3D 二次开发 创建Civil 3D 对象—— 01 —— 创建几何空间点
    Civil 3D 二次开发 创建Civil 3D 对象—— 00 ——
    Civil 3D 二次开发 创建AutoCAD对象—— 01 —— 创建直线
    Civil 3D 二次开发 新建CLR项目出现错误C2143
    Civil 3D 二次开发 创建AutoCAD对象—— 00 ——
    了解AutoCAD对象层次结构 —— 6 ——块表记录
    datepicker97使用
    使用angular 外接 templateUrl,使用ng-include
    angularJs 遮罩
    网上找的有关css兼容问题
  • 原文地址:https://www.cnblogs.com/hxjbc/p/5177901.html
Copyright © 2011-2022 走看看