面向对象之多态

1.final关键字

有关final关键字的特点:
 	表示:最终的,无法更改(状态修饰符)
     
    final修饰类,该类不能被继承!
    final可以修饰成员变量,该变量此时是一个常量(常驻内存!)
    		自定义常量的时候:public static final 数据类型 变量名 = 初始化;
    final可以修饰成员方法,该方法不能被重写
   
    final修饰的变量:只能被赋值一次(它的值不能再被更改了!)    
     
    常量的分类:
     		字面值常量
            自定义常量(final修饰的)

2.面试题:(final修饰的类型)

final修饰基本类型的变量和引用类型的区别? 
    
    final修饰的基本数
    据类型的变量:它的数据值不能再改变了(具体的数据值)
    final修饰的引用数据类型,它的地址值不能再改变了(但是成员变量的值不影响!)

3…多态

什么是多态?
  	一个事物在不同时刻显示出的不同状态(在堆内存中的变化)
  	
多态的前提条件:
  	 1)必须存在继承关系 (继承的好处第三点)
  	 2)要有方法重写 :
 	 3)需要存在:父类引用指向子类对象  (向上转型:使用的父类的东西,必须编译看左边!)
 		格式:父类名 对象名 = new 子类名() ;
 
多态的成员访问特点:
  父类名 对象名 = new 子类名() ;
  	1)成员变量: 编译看左,运行看左边
    2)成员方法:(非静态的):编译看左边,运行看右(因为存在子类覆盖父类的方法:方法重写)
    3)静态的成员方法:编译看左,运行看左
  			(子类出现了和父类一摸一样的静态方法,静态方法跟类相关,不存在重写!,访问方式:类名.方法名())
  
    4)构造方法:
            由于存在继承关系,还需要分层初始化!
        方法重写:指的是非静态方法!

4.多态的好处与弊端

多态的好处:
 		1)提高了代码的扩展性(由多态)
		2)提高了代码的复用性,维护性(由继承关系保证)
		
		
		
多态的弊端:
	
		不能够访问子类的特有功能!
如何解决呢?
      方式1:可以创建子类具体类对象 :子类名 对象名 = new 子类名() ;
            对象名.访问子类的自己的功能;
             但是,不好,从内存角度考虑,在堆内存中产生一个内存空间(比较消耗内存空间!)

     方式2:
          多态的第三个条件:父类引用指向子类对象 (向上转型)
            Fu f = new Zi() ;
            想办法:将父类的引用强制转换为子类的引用(向下转型)
            Zi z = (Zi)f;
     好处:不需要重新new对象,在堆内存是比较节省内存空间的!

     前提条件:要使用向下转型,必须先使用向上转型!

5.面试题:(多态的转型不当)

多态的向下转型使用不当,程序出现异常:
        注意事项:
            产生一个ClassCastException:运行时期异常(RuntimeException)的一种
        使用向下转型的时候类型不匹配导致的!
                
解决方法:查看强制转换是否正确
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值