JAVA学习日志6(多态)

JAVA学习日志6

代码块
代码块是写在大括号里的一段代码。(类=成员变量+成员方法+代码块,一些执行语句是不能直接写在类里的,只能放在方法里或代码块里)

  • 局部代码块
    1.定义位置:方法中
    2.作用:限制变量的生命周期,即代码块中局部变量随着代码块的执行而开始,随着代码快的结束而终止节省内存空间在这里插入图片描述

  • 构造代码块
    1.定义位置:类中方法外
    2.作用:主要给成员变量来赋值在这里插入图片描述
    3.说明
    [1].构造比构造方法先执行
    [2].构造代码块是由jvm来执行的
    [3].每实例化对象一次 都会执行一次构造代码块
    [4].所有的构造方法都需要给成员变量进行赋值时候 这时候就可以使用构造代码块来进行赋

  • 静态代码块
    1.定义位置:类中方法外 static{ 内容}
    2.作用: 1.用于给静态变量来进行赋值 2. 静态代码块只加载一次,在加载驱动、工具实例化、都可以使用静态代码块
    3.说明
    [1].静态代码块 是优先于这个类 最先进行加载
    [2].静态代码 块只执行一次

final关键字
final可以修饰类 方法 变量,拿final修饰的元素其中一但确定就不能改变

  • final 修饰的类不能被继承
  • final 修饰的方法不能重写
  • final修饰的后的变量实际就是一个常量,只能赋值一次。final修饰的引用类型数据,其地址值是无法改变的,但地址指向的具体内容是可改变的。如:使用final来修饰实例化的对象可以修改成员变量的值,但无法把新的地址给到这个实例化对象
  • 在这里插入图片描述

内部类
定义在类内部的类,定义在方法里的类叫做 局部内部类,定义在 类中方法外的类 叫做成员内部类。成员内部类又可以分为 : 普通内部类 私有内部类 静态内部类

  • 普通内部类
  1. 格式:
    class 类名{
    属性
    方法
    }
  2. 说明:
    [1] 内部类可以获取到外部类的资源,包括私有成员
    [2] 外部类在获取内部类的属性和方法时需要先实例化
    [3] 其他外部类实例化内部类的语法 外部类.内部类 对象名 = new 外部类().new 内部类( )
    在这里插入图片描述
  • 私有内部类
  1. 格式:
    private class 类名{
  2. 说明
    [1] 内部类可以获取到外部类的资源,包括私有成员
    [2] 外部类在获取内部类的属性和方法时需要先实例化
    [3] 其他外部类想获取内部类的属性或方法时是无法获取的,可以在外部类里定义一个方法实例化内部类对象,这个对象调用内部类的方法或返回内部类的属性。其他外部类调用外部类的该方法来间接获取内部类的属性或方法。
  • 静态内部类
  1. 格式:static class 类名{
  2. 说明:
    [1] 内部类中定义的静态变量,外部类可以通过 类名.属性名 的方式获取
    [2] 内部类中的非静态变量,外部类在访问时需要先实例化对象
    [3] 其他外部类实例化内部类的语法 外部类.内部类 对象名 = new 外部类.内部类()在这里插入图片描述
  • 局部内部类
  1. 格式(需要定义在方法里): class 类名{
    }
  2. 说明: 如果需要调用内部类中的方法,需要在内部类的方法中实例化这个对象 ,对象在调用方法,外部类访问这个方法时就是访问到者内部类了。

java 中四大访问修饰权限
public > protected > 默认修饰符 > private
在这里插入图片描述

多态

  1. 多态的前提条件:
    [1].必须是有继承关系
    [2].有方法的重写
    [3].父类的对象引用指向子类对象的引用 ==> 多态的语法
  2. 多态的语法:
    父类 对象名 = new 子类的对象()
    个人理解:子类发生了重写、添加了新的成员变量或方法,所以子类往往是对父类的扩充。但通过多态的语法可以看出,多态实际是把一个扩充了的内容强行缩小到一个固定统一的内容里,这样势必会发生一些替换,由子类里的新内容(发生了重写的内容)替换了父类里的内容,而子类比父类多出的内容暂时被砍掉了。所以通过 对象名.重写方法() 或取到的方法是重写后的方法。而变量没有重写的概念,即使子父类里有重名的变量 但通过对象名.属性名访问到的还是父类的属性。父类可以有多个子类,子类里重写后的方法功能可以是各不相同的,但经过多态后这些实际上类型不同的类变成了类型相同的类,通过操纵一个类型的父类达到操纵不同类型的子类的目的
  • 在多态中成员变量的访问规则
    通过 对象名.属性 访问的时候在父类中查找,找不到则向上查找,直到object类(不会向下到子类中查找)

  • 在多态中成员方法的访问规则
    1.没有重写的时候 == >调用的是父类的方法
    2.有重写的时候 ==> 调用的子类重写的方法

  • 多态中的向上转型
    父类对象 对象名 = new 子类对象();

  • 多态中向下转换
    子类对象 对象名 = (子类类名)已经进行了向上转型后的对象
    注:父类对象B是有子类a进行向上转型得到的,所有对象B在向下转型时只能还原为a类型的,可以通过 instanceof 判断是否可以还原为目标类型
    pet是由Dog类向上转型过的对象,现判断是否可以还原为Dog类型
    在这里插入图片描述
    个人理解:向下转型实际是把向上转型砍掉的内容进行恢复,由于恢复了父类成员之外的成员,所以类型就不能是父类类型,还原为缩减之前的类型

  • 多态好处

  1. 以父类作为参数 可以简化 代码
  2. 有利于代码的后期的维护与扩展
  3. 多态后 只需关注父类,不必拘泥于若干个功能不同子类
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值