final关键字、对象创建、多态

final关键字


final本意为"最终的",无法更改的。可以修饰类、成员方法以及成员变量
final修饰类    最终类             表示该类不能被继承
final修饰方法  最终方法         表示该方法不能被重写
final修饰变量  最终变量

使用方式

final关键字修饰类表示该类不能被继承,比如说:java.lang.System/String类等;
    - 通常用于防止滥用继承。
    - 
final关键字修饰成员方法表示该方法不能被重写;
    -如:java.text.SimpleDateFormat类中的format()方法
    - 通常用于防止不经意间造成的重写。
    - 
final关键字修饰成员变量表示必须指定初始化而且不能更改。
    - 如:java.lang.Thread类中的MAX_PRORITY
    - 通常用于描述常量的数据。


在Java语言中很少单独使用static关键字还有final关键字,通常使用 public static final 共同修饰成员
变量来表示常量的概念,常量的命名规则是:所有字母都是大写,不同的单词之间使用下划线连接。

    例如:
        public static final double PI = 3.14;

对象创建的过程


单个对象创建的过程

1.将xxx.class文件中相关类信息读取到内存空间的方法区,这个过程叫做类的加载。
2.当程序开始运行时找main()方法去执行方法体中的语句,使用new来创建对象。
3.若没有执行初始值采用默认初始化,否则采用执行的数值来作为初始化。
4.可以通过构造块来更改成员变量的数值。
5.执行构造方法体中的语句可以再次修改成员变量的数值。
6.此时对象创建完毕,继续执行后续的语句。

子类对象创建的过程

1.先加载父类再去加载子类,先执行父类的静态语句块,在执行子类的静态语句块;
2.执行父类的构造块,在执行父类的构造方法体,此时父类部分构造完毕。
3.执行子类的构造块,在执行子类的构造方法体,此时子类对象构造完毕;

多态


基本概念

多态就是指同一种事物表现出来的多种形态。

饮料:可乐、雪碧、红牛、美年达、.............
宠物:狗、猫、鸟、..........
整数: byte b = 10;    short s = 10;  int i = 10;.......

C++多态分为两种:编译多态、运行时多态

Java中的多态只有一种,就是运行时多态。是一种运行期间的行为,而不是编译期的行为。

语法格式

父类类型   引用 = new  子类类型();

如:
    Person p = new Student();
    p.show();
    
解析:
    在编译阶段p是Person类型,因此调用Person类自己的show()方法,若没有则编译的时候就报错。
    
    在运行阶段p真正指向的对象是Student类型,因此最终调用的是Student类中自己的show()方法。
    
当使用多态方式调用方法的时候,首先会检查父类中是否有该方法,如果没有,则编译报错。如果有,
再去调用子类的同名方法。(静态static方法属于特殊情况,静态方法只能继承,不能重写override,如果
子类中定义了同名同形式的静态方法,它对父类方法只能起到隐藏的作用。调用的时候用谁的引用,则调用谁的)

多态存在的三个比较条件:
    1.要有继承
    2.要有重写
    3.父类引用指向子类对象

多态的效果

1.对于指向子类对象的父类来说,在编译期间只能调用父类的方法,不能直接调用子类的方法。
2.对于父子类都有的非静态方法来说,最终调用子类中的重写版本。
3.对于父子类中都有的静态方法来说 ,最终调用父类中的版本,与指向的对象类型无关。

引用类型之间的转换

基本概述
    1.引用类型之间的转换必须发生在父子类之间,分为自动类型转换(向上转换)和强制类型转换(向下转换)
    
    2.向上转换(子类类型向父类类型的转换)
        父类引用指向子类对象: Person p = new Student();
        
        把一个子类对象转换为父类对象,向上转型(自动转型、隐式转型),代码中是父类引用指向子类的对象,父类
        引用指向类型实例,可以调用子类重写父类的方法以及父类派生的方法,无法调用子类独有的方法。
  
        父类中的静态方法无法被子类重写,所以向上转型之后只能调用父类原有的静态方法。
            
    3.向下转换(父类类型向子类类型的转换)
        子类引用指向父类实例,必须进行强制类型转换,可以调用子类特有的方法。必须满足转型的条件才能。
        
        instanceof 运算符可以进行判断,左边对象是否是右边对象的实例
        换句话来说就是左侧对象是否满足右侧对象类型的特征如果是返回true
        
        if(p instanceof Teacher){}
        
        父类中的静态方法(含有static修饰的方法,只能被子类继承使用无法被子类重写)。
        
    4.当没有父子类关系发生强制类型转换则编译报错,当拥有父子类关系发生强制转换是编译通过,
        若目标类型并不是该引用真正指向的类型时,在运行阶段发生类型转换异常。
        
    5.为了避免上述错误的发生,通常只要进行强制类型转换就需要进行判断,格式如下:
            if(引用变量名  instanceof 数据类型){}
            - 判断引用指向的对象是否为指定的数据类型,若是则返回true,否则返回false;

多态的实际意义

  • 多态的意义在于:可以屏蔽不同子类的差异性编写通用的代码,从而产生不同的效果。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值