JAVA笔记(九)-----多态

多态:可以理解为事物存在的多种形态

 

1.多态的体现:

  父类引用指向子类对象

  父类的引用也可以接收自己的子类对象

2.多态的好处:

  多态的出现大大提高了程序的扩展性

3.多态的前提:

  必须是类与类之间有关系,要么是继承要么是实现

  通常还有一个前提:存在覆盖

4.多态的弊端:

  提高了扩展性,但只能用父类引用访问父类中的成员。(想要访问子类中的成员需要进行强制类型转换,向下转型)

 

在多态中成员函数的特点:

  在编译时期:参阅引用行变量所属类中是否有方法,如果没有则编译失败。

  在运行时期:参阅对象所属类中是否有调用方法

简单总结:成员函数在多态调用时,编译看左边,运行看右边。

 

在多态中,成员变量的特点:

  无论编译和运行,都参考引用型变量所属的类。

在多态中,静态成员函数的特点:

  无论编译和运行,都参考引用型变量所属的类。

 

Object是所有类的基类(超类)

对象间比较可以用Object类中的equals函数

若想定义自己的比较方法可以复写equals函数

例如:

1 class Demo
2 {
3   public boolean equals(Object obj)
    {
      if(!(obj instanceof Demo))//判断obj是否属于Demo类
      {
        return false;
      }
      Demo d = (Demo)obj;
      return d.num == this.num;
    }
4 }

 

内部类


1.将一个类定义在另一个类的里面,里面那个类就成为内部类(内置类嵌套类)

2.访问特点

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

  ②而外部类要访问内部类中的成员必须建立内部类的对象。

 

内部类访问规则:

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

 之所以可以直接访问外部类成员是因为内部类持有一个外部类引用,格式:外部类名.this

2.外部类要访问内部类必须建立内部类对象

 

访问格式:

1.当内部类定义在外部类成员位置上,而且非私有,可以在外部其他类中直接建立内部类对象

  格式为:外部类名.内部类名 变量名 = new 外部类名().内部类名();

2.当内部类在成员位置上,就可以被成员修饰符所修饰

比如private:将内部类在外部类中进行封装

static:内部类就具备了static的特性

当内部类被static修饰后,只能访问外部类中的static成员。出现了访问局限

 

外部其他类中访问静态内部类的非静态成员

  格式:new Outer.Inner().function();//static内部类可以直接被外部类名调用而不用创建对象

外部其他类中直接访问静态内部类中的静态成员

  格式:Outer.Inner.function();//都是static修饰的,直接类名访问不用new

注意:当内部类中定义了static成员,则该内部类必须声明为static。

   当外部类中的static方法访问内部类时,内部类也必须是static的

 当描述事物时,事物的内部还有事物,该事物用内部类来描述,因为内部事物在使用外部事物的内容。

 

内部类定义在局部(方法内)时:

  1.不可以被成员修饰符修饰

  2.可以直接访问外部类中的成员,因为还持有外部类中的引用。

   但是不可以访问它所在的局部中的变量,只能访问被final修饰的局部变量。

 

匿名内部类

1.匿名内部类就是内部类的简写格式。

2.定义匿名内部类的前提:内部类必须是继承一个类或者实现接口。

3.匿名内部类格式:new 父类或者接口名(){定义子类的内容}

4.其实匿名内部类就是一个匿名子类对象。可以理解为带内容的对象

5.匿名内部类中定义的方法最好别超过3个

 

posted @ 2016-03-23 09:33  追风少年阿远  阅读(79)  评论(0)    收藏  举报