美文网首页
七、Java语言基础7(多态、内部类)

七、Java语言基础7(多态、内部类)

作者: SkyFireDragon | 来源:发表于2019-04-12 10:45 被阅读0次

这些是笔者学习Java基础时的笔记,供后来者参考(学习是持之以恒的的事情,一定要坚持哟,切记!切记!!!)

一、多态-概念

1、多态:可以理解为事物存在的多种体现形态(在对象上的体现)。

2、多态的扩展性
    <1>表现形式:
        父类的引用指向自己的子类对象。父类的引用也可以接收自己的子类对象。 
   <2>多态的前提:
        必须类与类之间有关系,要么实现,要么继承。通常还有一个前提:覆盖。
    <3>多态的好处:
        多态的出现大大提高程序的扩展性。
    <4>多态的弊端:
        提高了扩展性,但是只能使用父类的引用访问父类中的成员。


3、多态-转型(类型提升,类似于低级变量类型向高级的类型的转换)
    <1>不能将父类对象转换成子类类型
    <2>当父类的引用指向自己的子类对象时,该引用可以被提升,也可以被强制转换。
    <3>多态自始至终都是子类对象在做变化。
    Instanceof:(用于判断对象是何种子类型)

4、多态中成员的特点
    <1>在多态中成员函数的特点:
        在编译时期:参阅引用型变量所属的类中是否有调用的方法,如果有,编译通过,如果没有
    编译失败!
        在运行时期:参阅对象所属的类是否有调用的方法。
        简单的说:成员函数在多态调用时,编译看左边,运行看右边。
    <2>在多态中成员变量的特点:
        无论编译和运行,都参考左边(引用型变量所属的类)。
    <3>在多态中静态成员的特点:
        无论编译和运行,都参考左边

5、多态的主板实例(拓展性的体现)
interface PAI
{
    public abstract void open();
    public abstract void close();
} 

class NetCord implements PAI
{
    public void open()
    {
        System.out.println("NetCord Run...");
    }

    public void close()
    {
        System.out.println("NetCord Close...");
    }
}

声卡的实现:

class SoundCord implements PAI
{
    public void open()
    {
        System.out.println("SoundCord Run...");
    }

    public void close()
    {
        System.out.println("SoundCord Close...");
    }
}

class MainBorad
{
    public void Run()
    {
        System.out.println("Run .....");
    }

    public void fuction(PAI p)
    {
        p.open();
        p.close();
    }
}

class DuoTaiDemo
{
    public static void main(String[] args)
    {
        MainBorad m = new MainBorad();
        m.Run();
        m.fuction(new NetCord());
        m.fuction(new SoundCord());
    }
}

二、内部类

1、内部类的访问规则
    1.内部类可以直接访问外部类中的成员,包括私有。
    原因:之所以内部类可以直接访问外部类中的成员,是因为内部类中持有了一个外部类的引用,
格式外部类.this。
    2.外部类要访问内部类,必须建立内部类对象。

 2、内部类访问格式
   <1>访问格式
        1.当内部类定义在外部类的成员位置上,而且非私有,可以在外部其他类中,直接建立内部类对象。
       格式:外部类名.内部类名 变量名 = new 外部类对象.内部类对象。

<2>当内部类在成员位置上,就可以被成员修饰符所修饰。
       比如:private:将内部类在外部类中进行封装。
       static:内部类就具被static特性。

*注释:
    当内部类被static修饰后,只能直接访问外部类中的static成员。出现了访问局限。
    在外部其他类中,如何直接访问static内部类的非静态成员呢?
        new Outer.Inner().function();
    在外部其他类中,如何直接访问static内部类的静态成员呢?
        Outer.Inner.function();

注意:
    当内部类中定义了静态成员,该内部类必须是static的。
    当外部类中的静态方法询问内部类时,内部类也必须是static的。

 3、内部类的定义原则
   当描述事物时,事物的内部还有事物,该事物用内部类来描述。
   因为内部事务在使用外部事物的内容。

 4、匿名内部类
  <1>内部类定义在局部时:
    1.不可以被成员修饰符修饰。
    2.可以直接访问外部类中的成员,因为还持有外部类中的引用。
    但是不可以访问它所在的局部中的变量。只能访问被final修饰的局部变量。
    jdk升级后:局部变量不用final修饰,一样可以被使用。

 5、匿名内部类特点:
  <1>匿名内部类其实就是内部类的简写格式。
  <2>定义匿名内部类的前提:
      定义匿名内部类必须是继承一个类或者实现接口。
  <3>匿名内部类的格式: new 父类或者接口(){定义子类的内容}
  <4>其实匿名内部类就是一个匿名子类对象。

相关文章

网友评论

      本文标题:七、Java语言基础7(多态、内部类)

      本文链接:https://www.haomeiwen.com/subject/evyqwqtx.html