zoukankan      html  css  js  c++  java
  • 多态和内部类

    一、多态

    多态定义:某一类事物的多种存在形态。

    多态在代码中的体现:父类或接口的引用指向其子类的对象。

    /*对象的多态性*/
    class  动物
    {}
    
    class 猫 extends 动物
    {}
    
    class 狗 extends 动物
    {}
    
    猫 x=new 猫();
    动物 y=new 猫();
    

      猫这类事物既具有猫的形态,又具有动物的形态,这就是对象的多态性。简单的说,就是一个对象对应着不同的类型。

    多态的好处:提高了代码的扩展性,前期的代码可以使用后期的内容。

    多态的弊端:前期的代码不能使用后期子类特有的内容。

    多态的前提:

      1.要有关系,继承、实现。

      2.要有覆盖。

    父类和子类可以互相转换:

         Animal  a=new Cat();

        Cat c=(Cat)a;

    可用

        if (c instanceof Cat)

     { }

    来判断一个对象是否是某类型。

    class Fu
    {
         void  show()
        {
             System.out.println("Fu Show");
        }
    static void method()
    {
    System.out.println("Fu method");
    } } class Zi extends Fu { void show() { System.out.println("Zi Show"); }
    static void method()
    {
            System.out.println("Zi method");
    }
    } 
    class demo {
    public static void main(String[] args)
    {
    Fu f=new Zi();
    f.show();
    f.method();
    }
    }

      打印结果为"Zi Show"和"Fu method"。因为普能成员函数是由对象调用的(this),而静态成员函数是由类调用的。其实静态函数可以直接用类名调用。

    多态时,成员的特点:

    1. 成员变量

        编译和运行都看等号的左边。

    2. 成员函数(非静态)

       编译看左边,运行看右边。

    3. 静态函数

       编译和运行都看等号的左边。

    二、内部类

    一个类定义在另一个类里面,里面的类就称为内部类。

    1.内部类可以直接访问外部类中的成员,包括私有成员。

    2.外部类要访问内部类的成员,必须建立内部类的对象。

    直接访问外部类的内部类成员:

      Outer.Inner in=new Outer().new Inner();

     in.show();

    如果内部类是静态的,相当于一个外部类:

      Outer.Inner in=new Outer.Inner();

      in.show();

    如果内部类是静态的,成员函数也是静态的:(如果有成员函数是静态的,内部类必须是静态的)

     Outer.Inner.show();

    为什么内部类能直接使用外部类的成员变量呢?是因为内部类持有了外部类的引用。 即"外部类名.this"。

    内部类在局部位置上只能访问局部中被final修饰的局部变量。

    例如:

     abstract class Demo
      {
         abstract void show1();
         abstract void show1();
      }
     
    class Outer
      {
           int num=4;
            public void method()
           {
                  Demo d=new Demo()   //多态
                  {
                        void show()
                       {
                             System.out.println("show....."+num);
                        }
                  };
                  d.show1();
                  d.show2();
            }
     }

    匿名内部类就是一个内部类的简写形式,匿名内部类其实就是一个匿名子类对象。

    匿名内部类必须有一个前提:内部类必须继承或实现一个外部类或接口。

    如果匿名内部类有多个成员函数,则需要定义父类变量来处理。

  • 相关阅读:
    POJ 1007 DNA Sorting
    POJ 1005 I Think I Need a Houseboat
    POJ 1004 Financial Management
    POJ 1003 Hangover
    洛谷 P2064 奇妙的汽车
    01分数规划学习笔记
    线性基学习笔记
    codeforces 727F Polycarp's problems
    codeforces 722E Research Rover
    并查集学习笔记
  • 原文地址:https://www.cnblogs.com/jsddj/p/7616010.html
Copyright © 2011-2022 走看看