黑马程序员--java--多态和内部类

来源:互联网 发布:java接口与安卓对接 编辑:程序博客网 时间:2024/05/21 18:38

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------


1.多态

1.1 多态的概述
定义:某类事物的多种存在形态。

体现:(父类引用指向子类对象)父类或者接口的引用指向或者接受自己的子类对象。

作用:多态的存在提高了程序的扩展性和后期可维护性。

前提:
1.需要存在继承或者实现的关系。
2.需要有覆盖的操作。

好处:提高代码的扩展性,前期定义的代码可以使用后期的内容。
弊端:前期定义的内容不能使用后期子类的特有内容。
1.2 多态的应该规则
模式:Animal a = new Cat();
      多态建立后,对象a自能调用父类中子类复写了的方法,不能调用子类中自定义的方法。

注意:对象a一直都是在操作Cat中的方法,如果需要使用Cat中父类没有的方法,需要向下转型:
      Cat c = (Cat)a;
      但一个父类对应多个子类时,用于判断c是否为对应子类的对象可用:
      a instanceof Cat
      如果a是Cat对象,那么返回true,否则返回false。
1.3 多态时成员的特点
成员变量:
1.编译时:参考引用型变量所属的类中是否调用的成员变量。有,编译通过,没有,便以失败。
2.运行时:参考引用型变量所属的类中是否调用的成员变量。并运行该所属类中的成员变量。
总结:编译和运行都看等号左边。

成员函数(非静态):
1.编译时:参考引用型变量所属的类中是否调用的成员变量。有,编译通过,没有,便以失败。
2.运行时:参考对象所属的类中看是否有调用的函数。
总结:编译看左边,运行看右边。

静态函数:
1.编译时:参考引用型变量所属的类中是否调用的成员变量。
2.运行时:参考引用型变量所属的类中是否调用的成员变量。
总结:编译和运行都看左边。

总的来说,非静态方法编译看左边,运行看右边。静态方法和成员变量编译和运行都看左边。


2.内部类

2.1 内部类的概述
定义:将一个类定义再另一个类里面,里面的类就称为内部类。

设计思考:定义事物时,发现该事物描述中还有事物,温泉这个事物还在访问被描述的事物内容,这时候就要定义内部类。

特点:内部类可以直接访问外部类的成员,包括私有成员。而外部类需要访问内部类成员必须建立内部类对象。
      因为内部类持有外部类的引用:外部类.this
2.2 内部类成员的特点:

内部类定义在成员位置上时,其可以被private、static成员修饰符修饰

1.没被static修饰。
  而在外部其他类中访问内部类中成员时格式为:
  外部类.内部类  变量名 = 外部类对象.内部类对象;
  变量名.方法();

2.内部类定义在成员位置上时,被static修饰。此时内部类只能访问外部类中静态成员。
  而在外部其他类中访问内部类中成员时格式为:
  外部类.内部类  变量名 = 外部类对象.内部类;
  变量名.方法();

3.内部类定义在成员位置上时,被static修饰,其中的方法也被static修饰。
  外部其他类中访问内部类中成员时格式为:
  外部内.内部类.方法();

ps:内部类定义在局部时,此时不能被private和static修饰。但还是可以访问外部类的成员。但需要访问其所在函数中的变量时,这个变量必须被final修饰。
2.3 匿名内部类
定义:内部类的简化书写方式。

前提:内部类可以继承或实现一个外部类或接口。

格式:new 外部类或接口名(){覆盖其对于方法};(结尾必须有分号)

使用条件:通常使用方法或者接口类型参数,并且该接口中的方法不超过三个,可以将匿名内部了作为参数传递。
0 0