java基础篇10 -多态、访问控制、final关键字

1.访问控制
1.1 常用的访问控制符
    public - 公有的
    protected - 保护的
    啥也不写 - 默认的
    private - 私有的

1.2 访问控制符的比较
   访问控制符    访问权限    本类    本包中的类     子类     其他包的类
---------------------------------------------------------------------------
    public        公有的      ok         ok          ok          ok 
    protected     保护的      ok         ok          ok          no
    啥也不写      默认的      ok         ok          no          no
    private       私有的      ok         no          no          no

要求掌握的内容:
    a.public修饰的内容表示可以在任意位置使用;
    b.private修饰的内容只能在本类内部使用;
    c.通常情况下,成员变量都用private修饰,成员方法都用public修饰;

1.3 包的定义
    package 包名;
    package 包名1.包名2...包名n;
 
    定义包的主要目的就是为了便于文件的管理以及区分同名的文件。

2.final关键字(重点)
2.1 基本概念
   final本意为"最终的,不可更改的",该关键字可以修饰类、成员方法以及成员变量。

2.2 使用方式
   final关键字修饰类体现在不能被继承;
       - 为了防止滥用继承,如:String类、System类等。
   final关键字修饰成员方法体现在不能被重写;
       - 为了防止不经意间造成方法的重写,如:SimpleDateFormat类中的format()方法。
   final关键字修饰成员变量体现在该成员变量必须初始化而且不能更改;
       - 为了防止不经意间造成数值的改变,如:Thread.MAX_PRIORITY等

扩展:
   在以后的编程中单独使用static或final关键字修饰变量的场合很少,通常都是使用public static final共同修饰该变量来表达常量的含义,常量的命名规则是:所有字母都大写,不同单词之间采用下划线连接。
   如:
       public static final double PI = 3.14;           

3.对象创建的过程(了解)
3.1 单个对象创建的执行过程
   (1)当创建对象时会在堆区中申请内存空间,采用默认初始化的方式来处理成员变量;
   (2)采用显式初始化来进行成员变量的处理;
   (3)执行构造块中的代码,可以给成员变量再次赋值;
   (4)执行构造方法体中的代码,此时对象构造完毕;

3.2 子类对象创建的执行过程
   (1)当创建子类对象时会在堆区中申请内存空间;
   (2)先加载父类再加载子类,因此先执行父类的静态语句块,再执行子类的静态语句块;
   (3)先执行父类的构造块,再执行父类的构造方法体,此时父类部分构造完毕;
   (4)先执行子类的构造块,再执行子类的构造方法体,此时子类对象构造完毕;

4.多态(重中之重)
4.1 基本概念
   多态主要指同一种事物表现出来的多种形态。
   饮料:可乐、雪碧、加多宝、乐虎、红牛、... ...
   宠物:猫、狗、鸟、鱼、小强、...
   整数:byte b = 10; short s = 10; int i = 10; ...
   ... ...

4.2 语法格式
   父类类型 引用变量名 = new 子类类型();
如:
   Pet pc = new Cat();
   pc.show();
解析:
   在编译阶段调用Pet类中的show()方法,在运行阶段调用Cat类中重写以后的show()方法。

4.3 注意事项
   (1)使用父类的引用指向子类的对象时,父类的引用可以直接调用父类中的成员方法;
   (2)使用父类的引用指向子类的对象时,父类的引用不可以直接调用子类中的成员方法;
   (3)对于非静态的成员方法来说,编译阶段调用父类版本,运行阶段调用子类版本;
   (4)对于静态的成员方法来说,编译和运行阶段调用父类版本,与对象无关;

4.4 引用数据类型之间的转换
  (1)引用数据类型之间的转换分为两种:自动类型转换 和 强制类型转换;
     其中子类类型向父类类型的转换发生自动类型转换;
     其中父类类型向子类类型的转换需要强制类型转换;
  (2)引用数据类型之间的转换必须发生在父子类之间,否则编译报错;
  (3)当转换的子类类型并不是该引用真正指向的子类类型时,编译阶段通过,运行阶段
     发生类型转换异常;
  (4)为了避免上述错误的发生,建议每次强制类型转换之前使用以下格式进行判断:
     if(引用变量名 instanceof 目标类型){}  
        - 判断引用变量名真正指向的对象是否为目标类型,若是则返回true,否则返回false

4.5 多态的实际意义
   多态的实际意义在于屏蔽不同子类的差异性实现通用的编程,从而带来不同的结果。

不积跬步,无以至千里;不积小流,无以成江海。

但愿能够帮助看到这篇文章的你! ^_^ 加油

猜你喜欢

转载自blog.csdn.net/qq474800358/article/details/80489314
今日推荐