多态和内部类

一、多态

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

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

1
2
3
4
5
6
7
8
9
10
11
12
/*对象的多态性*/
class  动物
{}
 
class 猫 extends 动物
{}
 
class 狗 extends 动物
{}
 
猫 x=new 猫();
动物 y=new 猫();

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

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

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

多态的前提:

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

  2.要有覆盖。

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

     Animal  a=new Cat();

    Cat c=(Cat)a;

可用

    if (c instanceof Cat)

 { }

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

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Fu
{
     void  show()
    {
         System.out.println("Fu Show");
    }<br>    static void method()<br>    {<br>        System.out.println("Fu method");<br>    }
}
 
class Zi  extends Fu
{
     void  show()
    {
         System.out.println("Zi Show");
    }<br>   static void method()<br><em id="__mceDel">   {</em><em id="__mceDel"><em id="__mceDel">        System.out.println("Zi method");<br>    }</em></em>} <br>class demo { <br>   public static void main(String[] args) <br>   { <br>       Fu f=new Zi(); <br>       f.show();<br>       f.method();<br>    }<br>}

  打印结果为"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();
        }
 }
复制代码

 

复制代码

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

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

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

 

posted @   jsddj  阅读(184)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· ASP.NET Core 模型验证消息的本地化新姿势
· 对象命名为何需要避免'-er'和'-or'后缀
· SQL Server如何跟踪自动统计信息更新?
· AI与.NET技术实操系列:使用Catalyst进行自然语言处理
· 分享一个我遇到过的“量子力学”级别的BUG。
阅读排行:
· AI Agent爆火后,MCP协议为什么如此重要!
· Draw.io:你可能不知道的「白嫖级」图表绘制神器
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
· Java使用多线程处理未知任务数方案
点击右上角即可分享
微信分享提示