1.final关键字:防止被继承的类或覆写的方法修改,变量或方法被final定义后
  会在内在中存在

特点:
   1)可以修饰类、函数、变量。
   2)被final修饰的类不可以被继承。
   3)被final修饰的方法不可以被覆盖。
   4)被final修饰的变量是常量,只能赋值一次。通常被修饰的变量所有字母大写。
   5)内部类只能访问被final修饰的局部变量,这个比较少用。

2.抽象类:
  抽象方法所在的类,必须标示为抽象类,因此,抽象类因抽象方法而存在的。
  特点:
  1)抽象类不能用new()建立对象。

3.继承类
  子类和父类有一模一样的方法时,子类继承父类后,子类对象调用该方法默认是
  调用子类中的方法,如果需要调用父类中的该方法,则在子类的该方法内的第一句为super.方法();即可
  注意:子类方法覆盖父类方法时,方法的修饰权限一定要大于或者等于父类。
        子类中的静态方法只能覆盖父类中的静态方法。

4.多态:多态的出现是为了提高程序的扩展性
  思想:通过面向对象的思想,可以指挥对象做事情,如果对象多了,指挥每一个对象,就变得麻烦了。

如何将麻烦的事情简单化?对这些对象进行分析并向上抽取,出现了共性类型后,就可以指挥共性类型

做事情。

多态的三个条件:继承,重写,父类引用指向子类对象。
  说明:1)类与类之间必须要有关系
        2)通常会出现覆盖操作

在程序上的体现:
      1)父类或接口引用指向了自己的子类对象
         如:Father f = new Son();  //Fater可以是类,也可以是接口
   
      2)父类或接口引用接收自己的子类对象
         如:有个方法传递的参数为父类或子类
             method(Father f){
                ......
             }
         调用改方法时,则
             method(new Son){
                ......
             }

成员函数在多态中的特点:
  1)编译时期,参考的是引用变量所属的类串是否有所调用的方法
  2)运行时期,参考的是对象所属的类中是否有调用的方法
  即:编译时看左边,运行时看右边。
  
  多态问题:
  1)当父类引用f指向其子类的对象的时候,通过f无法访问专属于子类对象的成员。
为什么这样不可以?LZ有没有想过,因为f是FatherClass,所以编译器只知道f拥有FatherClass.class的

信息,FatherClass.class以外的信息,编译器不知道,而子类的对象成员是在SonClass.class里,也就是

说在FatherClass.class以外,所以f无法访问子类的对象成员

2)假如子类中有对父类方法的重写,那么根据多态机制,通过f访问这个方法的时候实际访问的是子类

中重写的方法。
为什么这样可以?上面说了,f只能访问FatherClass.class的信息(注意这里指的是编译期编译器只知道f

是FatherClass类型,不知道f具体指向什么对象,运行期才知道指向什么对象),而子类重写的方法,父

类中也存在,即SonClass.class重写的方法,FatherClass.class里也有(如果SonClass.class里有但是

FatherClass.class里没有的方法,f也不能直接调用),所以f可以访问,但是调用的时候(注意这里指的

是运行期),f实际指向的是SonClass对象,所以调用的是SonClass对象的方法。

3)问题是如果子类重写的方法中访问了专属于子类的成员变量,这时候通过父类引用f还可以调用那个

被重写的方法吗?
可以,要分清编译期和运行期,编译期是编译器检查语法和类型,运行期是解析器解析伪代码为机器指令

而执行,编译期编译器会检查f的访问范围,也就是f的访问不超过FatherClass.class的信息就不会出错,

运行期解析器会解析方法的代码指令,因为f指向子类对象,所以会解析子类重写的方法代码指令,而子类

对象的内存空间是包含子类的成员变量的空间的,所以也不存在子类成员变量没有分配内存的问题,所以

可以调用。

java学习笔记day05的更多相关文章

  1. 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁

    什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...

  2. 0035 Java学习笔记-注解

    什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...

  3. Java学习笔记(04)

    Java学习笔记(04) 如有不对或不足的地方,请给出建议,谢谢! 一.对象 面向对象的核心:找合适的对象做合适的事情 面向对象的编程思想:尽可能的用计算机语言来描述现实生活中的事物 面向对象:侧重于 ...

  4. 0032 Java学习笔记-类加载机制-初步

    JVM虚拟机 Java虚拟机有自己完善的硬件架构(处理器.堆栈.寄存器等)和指令系统 Java虚拟机是一种能运行Java bytecode的虚拟机 JVM并非专属于Java语言,只要生成的编译文件能匹 ...

  5. 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用

    垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ...

  6. 0028 Java学习笔记-面向对象-Lambda表达式

    匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...

  7. 0025 Java学习笔记-面向对象-final修饰符、不可变类

    final关键字可以用于何处 修饰类:该类不可被继承 修饰变量:该变量一经初始化就不能被重新赋值,即使该值跟初始化的值相同或者指向同一个对象,也不可以 类变量: 实例变量: 形参: 注意可以修饰形参 ...

  8. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  9. Java学习笔记-多线程-创建线程的方式

    创建线程 创建线程的方式: 继承java.lang.Thread 实现java.lang.Runnable接口 所有的线程对象都是Thead及其子类的实例 每个线程完成一定的任务,其实就是一段顺序执行 ...

随机推荐

  1. Linux下使用JNI的常见问题及解决方案

    JNI是java和C/C++混合编程的接口,可以很方便地实现java调用C/C++语言.具体的使用方法,网上有很多教程,在此不做过多介绍.本博客只关注在使用JNI的过程中的常见问题. 1.     生 ...

  2. EffectiveC#11--选择foreach循环

    1.C#的foreach语句可以为你的任何集合产生最好的迭代代码 不推荐如下写法(?原因未明白 作者意思是阻碍jit边界检测) int len = foo.Length; for ( int inde ...

  3. PHP学习笔记三十四【记录日志】

    <?php function my_error2($errno,$errmes) { echo "错误号:".$errno; //默认时区是格林威治相差八个时区 //设置 1 ...

  4. 1207.1——C语言 函数

    函数可以分为无参函数和有参函数. 无参函数的定义 无参函数定义的一般形式如下:返回值类型  函数名(){    函数体} 说明: 返回值类型可以是C语言中的任意数据类型. 函数名是标识符的一种,命名规 ...

  5. “有箭头的视图”,即程序的Storyboard Entry Point。

    设置方法很简单:打开StoryBoard文件,选中要设置为第一视图的ViewController,在右边工具栏勾选Is Initial View Controller就好了,此时你会看到ViewCon ...

  6. Java 枚举随笔

    public enum Color{ //定义枚举并赋值 RED("红色", 1), Blue("蓝色", 2), Yellow("黄色", ...

  7. [C++程序设计]用函数指针变量调用函数

    指针变量也可以指向一个函数.一个函数在编译时被分配给一个入口地址.这个函数入口地址就称为函数的指针.可以用一个指针变量指向函数,然后通过该指针变量调用此函数 #include <iostream ...

  8. [C++程序设计]指向数组元素的指针

    如果先使p指向数组a的首元素(即p=a),则: (1) p++(或p+=1).使p指向下一元素,即a[1]. 如果用*p,得到下一个元素a[1]的值. (2) *p++.由于++和*同优先级,结合方向 ...

  9. Kindeditor上传图片到七牛云存储插件(PHP版)

    由于工作需要,要使用第三方存储作为图床,发现七牛云挺不错,又可以免费使用10G的空间,决定先试试. 项目中使用的是Kindeditor作为网页编辑器的,七牛云的插件里没有现成的Kindeditor的插 ...

  10. 利用7z实现一键解压

    目的: 实现双击zip,7z,rar等文件时自动解压,解压完毕后自动打开文件夹. 工具: [本文末尾附有所有工具的下载地址] 7z.exe types 步骤: 新建"7z-自动解压" ...