06-多态

本文深入探讨了多态的概念及其实现方式,解释了如何通过父类引用指向子类对象来实现多态,并讨论了多态带来的好处与限制。此外,还详细介绍了内部类的定义、访问特点及其在不同位置上的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

4.9 多态

  • 定义:某一类事物的多种存在形态。
  • 概念:多态的概念 父类引用指向子类对象 而实际调用的方法为子类的方法。

  • 例:动物中猫,狗。

  • 猫这个对象对应的类型是猫类型 
     猫 x = new 猫();
  • 同时猫也是动物中的一种,也可以把猫称为动物。 
     动物 y = new 猫(); 
     动物是猫和狗具体事物中抽取出来的父类型。 
     父类型引用指向了子类对象。

体现:父类或者接口的引用指向或者接收自己的子类对象。 
作用:多态的存在提高了程序的扩展性和后期可维护性 
前提: 
 1.要有继承或者实现。 
 2.要有覆盖(重写)操作

多态的好处: 
  提高了代码的扩展性,前期定义的代码可以使用后期的内容(子类重写了父类的方法,调用子类的内容)。 
多态的弊端: 
  前期定义的内容不能使用(调用)后期子类的特有内容(子类后来新添加的特性而父类原来没有的)。

4.9.1多态的特点

对于成员函数: 
 编译时:参考引用型变量所在的类中是否有调用的函数,有 编译通过, 没有 编译失败 
 运行时:参考对象所在的类中是否有调用的函数,有 运行成功,没有 运行失败

 口诀:编译看左边,运行看右边

对于成员变量: 
 编译时:参考引用型变量所在的类中是否有调用的成员变量,有 编译通过, 没有 编译失败 
 运行时:参考引用型变量所在的类中是否有调用的成员变量,有 编译通过, 没有 编译失败

 口诀:编译运行都看左边

5内部类

定义:一个类定义在另一个类的里面,在里面的类称为内部类(内置类,嵌套类)。 
访问特点: 
  内部类可以直接访问外部类中的成员,包括私有成员。 
  而外部类要访问内部类中的成员必须要建立内部类的对象。

5.0.1内部类的位置:

内部类定义在成员位置上 
 可以被private static成员修饰符修饰。 
 被static修饰的内部类只能访问外部类中的静态成员。

内部类定义在局部位置上 
 也可以直接访问外部类中的成员。 
 同时可以访问所在局部中的局部变量,但必须是被final修饰的(jdk8的新特性已经解决,jdk7以下还是需要final修饰)

tip:因为(包含内部类的)方法出栈时,里面的成员变量会被释放,而此时有引用指向方法中的内部类对象时,对象还是存在堆中,但是要访问的变量会找不到,会出现错误,总得来说就是方法和对象的生命周期不同。

5.1匿名内部类

就是内部类的简化写法。

前提: 
 内部类可以继承或实现一个外部类或者接口。 
格式为: 
 new 外部类名或者接口名(){覆盖类或者接口中的代码,(也可以自定义内容。)}

  1. //new 外部类名(){ 重写类的代码和自定义代码 };
  2. abstract class Fu{
  3. abstract void show();
  4. }
  5. class OutClass{
  6. void method(){
  7. new Fu(){
  8. void show(){
  9. System.out.println("匿名内部类");
  10. }
  11. };
  12. }
  13. }

简单理解: 
 就是建立一个建立一个带内容的外部类或者接口的子类匿名对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值