1、 封装

  封装性的产生目的:保护某些属性和方法不被外部所看见。

  封装的实现:为属性和方法进行封装是通过关键字private声明的;实现该属性的set和get方法,为外部所访问

  该公开的公开,该私有的私有;
  类的属性一般私有;类的方法:该公开的公开,该私有的私有;
  类,封装了数据和方法;方法,封装了实现的过程,接口是参数和返回值;
  数据原型类:又叫实体类
  1)get/set 方法;对某一个属性只提供get不提供set方法,就是只读的,在类的外部不能修改;
  2)提供统一的参数检查,在set上给与检查,判断合法性和安全性;
  将属性都私有,并且提供set/get 方法,做成了通用的组件,叫JavaBean;
2、 继承:
  任何父类适用的地方,子类一定适用;单纯的代码复用不需要继承
  extends: 继承,实际上是对父类的扩展;
  
  生成对象的过程是怎么样的?
  1)分配对象空间;
  2)给属性赋初值;boolean:false;数值类型:0或0.0; 对象类型:null;
  3)调用构造方法;

  定理:JVM:上帝;构造学生,先构造一个人;
  1)任何子类的构造方法都会调用父类的构造方法;
  2)任何类都有构造方法,如果程序员自己不定义则系统会加上一个默认的无参空实现的构造方法;如果定义了,则系统不会加;
  3)任何子类的构造方法的第一行一定是super(…)或this(…);如果程序员不这么写,则系统会默认加上super();

  自己写this()就不会加super();但this()调用的构造方法一定 会调用父类的构造方法;
  This(…); //表示调用本类的其它构造方法,只能出现在构造法的第一行;其它位置都是不合法的;

  public Animal(String name,int age,int legs){
      //super();//编译器会自动添加一个super();
      this.name=name;
      this.age=age;
      this.legs=legs;
  }
  public Animal(String name,int age){
    // this.name=name;
    // this.age=age;
    // this.legs=4;
    this(name,age,4);//调用本类的其它构造方法;只能出现在构造方法的第一个有效行;系统不会在这里加一个super();
    //但是this(name,age,4);会调用3个参数的构造方法,这个构造方法会默认调用父类的构造方法;
  }
  
  Super(…);//调用父类的构造方法,也是只能出现在构造方法的第一行;根据参数类型来确定调用父类的哪个构造方法;
  Super();//默认调用父类的无参的构造方法;
  即使把父类的私有属性继承下来了,但是还是不能直接访问,必须用getName();
  如果在子类中定义一个和父类相同的属性name,那么在子类中用 super.getName()来和子类的name 区分;
  总结:
  Super.xxx ;//在子类中有和父类同名的属性时;
  this.xxx //方法中有局部变量和成员变量命名冲突
  Super(xxx);//调用父类的构造方法,只能出现在构造方法的第一行;
  this(xxx);//调用本类的其它构造方法,也是只能出现在构造方法的第一行,不能和this同时出现;

  如果在子类中定义和父类同名的属性是不推荐的,一般不要这么写;也没有意义;也不符合规范的;

  方法是经常覆盖的; 
  方法的覆盖:
  1)发生在父子类中;
  2)同名、同参、同返回值
  3)访问权限跟父类相同或更宽;不能比父类更封闭;
  4)子类方法抛出异常的类型不能比父类方法更宽泛;
  Move()//父类; move(int)//子类; 不叫覆盖,也可以叫重载;
3.多态:
  类中多个方法的重载叫多态,父子类中方法的覆盖也叫多态。
  因此多态有两种体现:一个是方法的重装,一个是方法的覆盖。

  多态有方法的多态和对象的多态(一个对象多种形态)。
  多态的前提:将子类对象当作父类对象来看,
  体现在代码上就是Animal a=new Bird(....);
  所有的多态可以归结为两个定理:
  1.可以把子类对象当作父类对象来看,一旦这样做了,就只能去调用父类中原有定义的属性和方法,也就是子类中扩展的方法或属性就不能调用了。 
  2.当我们把子类对象当作父类对象来看的时候,如果子类覆盖了父类中的方法,在调用的时候实际调用的是子类覆盖后的方法。

  Animal a=new Bird();前面的引用a的类型叫做编译时类型(主观认为),
  后面的bird 类型叫做运行时类型(客观存在)。
  强制类型转换的前提是你的运行时类型本来就是你要强制转换成的类型。

  要想知道某个对象是否是某一个类的实例: instanceof,他的左边是个对象名,右边是类名或者是接口名,如果这个对象是右边的类的实例,返回真,否则返回假。 这个方法会做自动类型兼容。
  Bird d=new Bird();
  d instanceof Animal返回的是真;
  在判断是不是个类型的时候,他不去看对象的编译时类型,看得是运行时类型,如例:Animal a=new Bird(); a instanceof Bird 返回的是真,因为a的运行时类型就是Bird。一般来说强制类型转换和instanceof 是结合使用的。 

JAVA面向对象特征详解的更多相关文章

  1. Java 反射机制详解(下)

    续:Java 反射机制详解(上) 三.怎么使用反射 想要使用反射机制,就必须要先获取到该类的字节码文件对象(.class),通过字节码文件对象,就能够通过该类中的方法获取到我们想要的所有信息(方法,属 ...

  2. 云时代架构阅读笔记六——Java内存模型详解(二)

    承接上文:云时代架构阅读笔记五——Java内存模型详解(一) 原子性.可见性.有序性 Java内存模型围绕着并发过程中如何处理原子性.可见性和有序性这三个特征来建立的,来逐个看一下: 1.原子性(At ...

  3. JAVA对象头详解(含32位虚拟机与64位虚拟机)

    为什么要学习Java对象头 学习Java对象头主要是为了解synchronized底层原理,synchronized锁升级过程,Java并发编程等. JAVA对象头 由于Java面向对象的思想,在JV ...

  4. java封装基础详解

    java封装基础详解 java的封装性即是信息隐藏,把对象的属性和行为结合成一个相同的独立单体,并尽可能地隐藏对象的内部细节. 封装的特性是对属性来讲的. 封装的目标就是要实现软件部件的"高 ...

  5. Java 字符串格式化详解

    Java 字符串格式化详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 文中如有纰漏,欢迎大家留言指出. 在 Java 的 String 类中,可以使用 format() 方法 ...

  6. Java 序列化Serializable详解

    Java 序列化Serializable详解(附详细例子) Java 序列化Serializable详解(附详细例子) 1.什么是序列化和反序列化Serialization(序列化)是一种将对象以一连 ...

  7. Java String类详解

    Java String类详解 Java字符串类(java.lang.String)是Java中使用最多的类,也是最为特殊的一个类,很多时候,我们对它既熟悉又陌生. 类结构: public final ...

  8. 最新java数组的详解

    java中HashMap详解 http://alex09.iteye.com/blog/539545 总结: 1.就像引用类型的数组一样,当我们把 Java 对象放入数组之时,并不是真正的把 Java ...

  9. JAVA IO 类库详解

    JAVA IO类库详解 一.InputStream类 1.表示字节输入流的所有类的超类,是一个抽象类. 2.类的方法 方法 参数 功能详述 InputStream 构造方法 available 如果用 ...

随机推荐

  1. Java高级程序设计笔记 • 【第3章 多线程(二)】

    全部章节   >>>> 本章目录 3.1 同步代码块 3.1 线程安全 3.1.1 模拟银行取款 3.1.2 同步代码块的使用 3.1.3 实践练习 3.2 同步方法 3.2. ...

  2. Shelll1-基础入门之变量

    1.静态语言:编译型语言 强类型(变量) 事先转换成可执行格式 也就是先编译在执行 比如 C++.C. java C# 动态语言:解释性语言 弱类型 边解释边执行 比如PHP shell python ...

  3. Red Scarf abc171_E

    题目大意 除去一个元素后的异或和 题目分析 首先异或有交换律 \(a \ \mathrm{xor} \ a=0\) \(0 \ \mathrm{xor} \ a=a\) 可以求出异或和,在异或当前元素 ...

  4. 前端如何低门槛开发iOS、Android、小程序多端应用

    现如今跨平台开发技术已不是什么新鲜话题了,在市面上也有一些开源的框架可供选择,然而技术成熟.产品服务健全的平台并不多,其中也不乏推陈出新的框架值得关注. 比如最近使用的AVM,由APICloud迭代推 ...

  5. PowerShell【For篇】

    1-10的循环 1 for($i=1;$i -le 10;$i++){ 2 $i 3 } 当然之前前一篇中所写到的1..9你也可以直接在ps中写道 1..10 运行结果也是一样的. 也可以这样 1 f ...

  6. Python 国内镜像源

    让 python pip 使用国内镜像源 国内镜像源: 清华:https://pypi.tuna.tsinghua.edu.cn/simple 阿里云:http://mirrors.aliyun.co ...

  7. react中异步组件以及withRouter的使用

    什么是异步组件?简单来说就是异步加载一个组件,正常情况浏览器加载的是我们打包好的bundle.js文件,那么这个文件是集合了所有js是代码,然而我们首屏加载并不需要一次性加载所有的组件,这会造成性能的 ...

  8. java中的spi

    JAVA中的SPI机制 1.SPI简介 SPI机制(Service Provider Interface)其实源自服务提供者框架(Service Provider Framework),是一种将服务接 ...

  9. WebLogic任意文件上传漏洞(CVE-2019-2725)

    一,漏洞介绍 1.1漏洞简介 Oracle weblogic反序列化远程命令执行漏洞,是根据weblogic的xmldecoder反序列化漏洞,只是通过构造巧妙的利用链可以对Oracle官方历年来针对 ...

  10. 从头造轮子:python3 asyncio之 gather (3)

    前言 书接上文:,本文造第三个轮子,也是asyncio包里面非常常用的一个函数gather 一.知识准备 ● 相对于前两个函数,gather的使用频率更高,因为它支持多个协程任务"同时&qu ...