zoukankan      html  css  js  c++  java
  • 多态

    class Mammal{}

    class Dog extends Mammal {}

    class Cat extends Mammal{}

    public class TestCast

    {

             public static void main(String args[])

             {

                       Mammal m;

                       Dog d=new Dog();

                       Cat c=new Cat();

                       m=d;

                       d=m;

                       d=(Dog)m;

                       d=c;

                       c=(Cat)m;

             }

    }

    D其中d=m d=c 会出错  d=m是把基类对象赋值给子类需要强制类型转换  d=c:d和c是两个不同的类的对象不能进行赋值运算

    public class ParentChildTest {

             public static void main(String[] args) {

                       Parent parent=new Parent();

                       parent.printValue();

                       Child child=new Child();

                       child.printValue();

                      

                       parent=child;

                       parent.printValue();

                      

                       parent.myValue++;

                       parent.printValue();

                      

                       ((Child)parent).myValue++;

                       parent.printValue();

                      

             }

    }

    class Parent{

             public int myValue=100;

             public void printValue1 () {

                       System.out.println("Parent.printValue(),myValue="+myValue);

             }

    }

    class Child extends Parent{

             public int myValue=200;

             public void printValue() {

                       System.out.println("Child.printValue(),myValue="+myValue);

             }

    }

    运行结果 100 200 200 201

    上面代码中父类和子类有相同名字的方法,并且把子类的对象赋值给了子类的对象,这是父类的parent其实是子类的类型,所以value++是加在了父类中而调用的函数是子类的所以输出的是子类的value为200

    public class CatchWho2 {

        public static void main(String[] args) {

            try {

                try {

                    throw new ArrayIndexOutOfBoundsException();

                }

                catch(ArithmeticException e) {

                    System.out.println( "ArrayIndexOutOfBoundsException" + "/内层try-catch");

                }

                throw new ArithmeticException();

            }

            catch(ArithmeticException e) {

                System.out.println("发生ArithmeticException");

            }

            catch(ArrayIndexOutOfBoundsException e) {

                System.out.println( "ArrayIndexOutOfBoundsException" + "/外层try-catch");

            }

        }

    }

    结果:ArrayIndexOutOfBoundsExceptio外层try-catch

    在第二个try中抛出的警告被外层接受并处理

  • 相关阅读:
    86. Partition List
    328. Odd Even Linked List
    19. Remove Nth Node From End of List(移除倒数第N的结点, 快慢指针)
    24. Swap Nodes in Pairs
    2. Add Two Numbers(2个链表相加)
    92. Reverse Linked List II(链表部分反转)
    109. Convert Sorted List to Binary Search Tree
    138. Copy List with Random Pointer
    为Unity的新版ugui的Prefab生成预览图
    ArcEngine生成矩形缓冲区
  • 原文地址:https://www.cnblogs.com/19950216z/p/4975716.html
Copyright © 2011-2022 走看看