zoukankan      html  css  js  c++  java
  • Java 多态 虚方法

    Java中多态的实现方式:接口实现,继承父类进行方法重写,同一个类中进行方法重载。

    看代码:

    package com.company;
    
    public class Main {
    
        public static void main(String[] args) {
            A a1 = new A();
            A a2 = new B();
            B b = new B();
            C c = new C();
            D d = new D();
            System.out.println(a1.show(b));
            System.out.println(a1.show(c));
            System.out.println(a1.show(d));
            System.out.println(a2.show(b));
            System.out.println(a2.show(c));
            System.out.println(a2.show(d));
            System.out.println(b.show(b));
            System.out.println(b.show(c));
            System.out.println(b.show(d));
        }
    
    
    }
    
    class A {
        public String show(D obj) {
            return ("A and D");
        }
    
        public String show(A obj) {
            return ("A and A");
        }
    }
    
    class B extends A {
        public String show(B obj) {
            return ("B and B");
        }
    
        public String show(A obj) {
            return ("B and A");
        }
    }
    
    class C extends B {
    }
    
    class D extends B {
    }

    第一遍看的时候,第四,第五个看不懂

    A a2=new B()

    栈中的引用变量是A,堆中的实例变量是B。

    将子类的实例,赋值给父类的引用。就是向上转型。

    向上转型,在运行时,会遗忘子类对象中与父类对象中不同的方法。也会覆盖与父类中相同的方法--重写。 

    所以a2,可以调用的方法就是,A中有的,但是B中没有的方法,和B中的重写A的方法。

    =============================================================================================

    http://www.cnblogs.com/jack204/archive/2012/10/29/2745150.html

  • 相关阅读:
    看清爱情的本质,学会受伤。
    美股课堂:美国银行开户亲历记
    京JS 2013
    果皮移动
    果皮移动 移动电商!
    http://www.cutt.com/
    简网APP工场-服务介绍
    Get started
    中科院青年公寓
    c++ replaceAll
  • 原文地址:https://www.cnblogs.com/hongdada/p/5809777.html
Copyright © 2011-2022 走看看