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

  • 相关阅读:
    python type and __mateclass__和__new__的使用
    python讲解类的特殊成员方法
    python 静态方法、类方法、属性方法详解
    python 多态
    nginx的常用设置
    初识vue
    设置跨域访问
    1分钟安装wordpress
    wechat,wechat-api,mongoose,winston等的使用
    winston自定义日志管理
  • 原文地址:https://www.cnblogs.com/hxjbc/p/5177901.html
Copyright © 2011-2022 走看看