java从入门到入土---基础篇02--面向对象oop

面向对象

面向对象的概念

  所谓的面向对象是一种编程思想,经过这种思想能够把生活中的复琐事情变得简单化,从原来的执行者变成了指挥者,面向对象是基于面向过程而言的java

 

面向对象的三大特征

封装

  概念:封装是指隐藏对象的属性和实现细节,仅仅对外提供公共的访问方式编程

  优势:一、提升安全性;二、提升重用性安全

  private关键字:是一个权限修饰符,用于修饰成员变量和成员函数,被私有化的成员只能在本类中访问。想要修改只能,对外提供公共的,get和set方法。ide

 

继承

  初衷:提升代码的重用性函数

  好处:假设没有继承结构,每种小动物都须要提供吃的功能,可能得写100万次,这个业务相同代码量很是大下降了开发效率.产生继承后,只须要把共性的吃的功能在父类里写一次便可,哪一个小动物须要提供吃,就来继承父类.this

  特色:1.使用extends关键字线程

     2.至关于子类把父类的功能复制了一份设计

     3.Java只支持单继承对象

     4.继承能够传递继承

     5.不能继承父类的私有成员

     6.继承多用于功能的修改,子类能够拥有父类的功能的同时,进行功能拓展

     7.像是is a 的关系

  super关键字

    表明的是父类对象的一个引用

    用来在子类中使用父类的功能

    若是用在构造方法中,super必须是第一条语句

  方法重写Override

    发生在父类与子类间的现象,子类继承父类后,就可使用父类的全部功能.当子类想要修改父类原有的功能时,就会发生方法的重写/复写/覆盖

    重写的要求 : 继承关系 + 在子类中方法的声明/签名 必须和 父类如出一辙(方法的声明/签名 包括: 方法返回值 方法名(参数列表))

 

多态

  概念

    多态是指同一个对象有多种形态;多态是为了统一调用标准---父类就是标准,一切向父类看齐;好处是:不关心具体的类型,屏蔽了子类之间的不一样,把子类都会当作父类来看,作出统一的编程,写出通用的代码

  特色

    前提: 发生继承关系 + 发生方法重写

    口诀: 父类引用指向子类对象 + 编译看左边运行看右边

  多态的好处

    提升了程序的灵活性和扩展性;多态中,根本不关心具体的子类的类型,能够屏蔽子类间的不一样,把子类都当作父类对待;代码更加通用,作出统一的编程

  多态的使用

    多态对象使用的成员变量 --- 使用父类的

    多态对象使用的成员方法 --- 使用了父类的方法声明,使用了子类的方法体

    静态方法能够重写吗 --- 不能够!!静态资源,谁调用就执行谁的功能,根本没有重写的说法!!

 

类和对象

  Java语言最基本单位就是类,相似于类型。

  类是一类事物的抽象

  能够理解为模板或者设计图纸

  经过class关键字建立

对象

  类是一类事物的抽象,对象是具体的实现

  对象的状态用来描述对象的基本特征

  对象的行为用来描述对象的功能

  对象的标识是指对象在内存中都有一个惟一的地址用来和其余对象区分开来

  经过new关键字建立

建立对象的流程

  Person p = new Person();

  把Person.class文件加载进内存;在栈内存中,开辟空间,存放变量p;在堆内存中,开辟空间,存放Person对象;对成员变量进行默认的初始化;对成员变量进行显示初始化;执行构造方法(若是有构造代码块,就先执行构造代码块再执行构造方法);堆内存完成;把堆内存的地址值赋值给变量p ,p就是一个引用变量,引用了Person对象的地址值。 

 

访问控制符

public
访问范围:类、包、子类、任意
protected
访问范围:类、包、子类
default
访问范围:类、包
private
访问范围:类

构造方法

构造方法的语法: 修饰符 类名(参数列表){}

构造方法的触发时间节点: 建立对象/new/实例化

  构造方法能够重载,目的是为了,方便外界比较灵活的建立对象

概念:

  构造方法是一种特殊的方法,它是一个与类同名且返回值类型为同名类类型的方法。对象的建立就是经过构造方法来完成,其功能主要是完成对象的建立或者对象的初始化。当类实例化一个对象时会自动调用构造方法。构造方法和其余方法同样也能够重载。

 

抽象类

概念
  Java中能够定义没有方法体的方法,该方法由其子类来具体的实现。该没有方法体的方法咱们称之为抽象方法,含有抽象方法的类咱们称之为抽象类。
抽象类能够理解为是一个只有方法声明没有方法体的特殊类。
特色
  经过java关键字abstract实现
  能够修饰方法或者类
  抽象类中能够没有抽象方法(由子类去实现)
  若是类中有抽象方法,那该类必须定义为一个抽象类
  子类继承了抽象类之后,要么仍是一个抽象类,要么就把全部抽象方法都重写
  多用于多态中
  抽象类不能够被实例化
用法
  构造函数
    抽象类也有构造方法,可是不能自己实例化。
    那抽象类的构造函数有啥用?通常用于给子类实例化
  成员变量
    既能够有变量,也能够有常量
  成员方法
    抽象类里,既能够有普通方法,有能够有抽象方法

 

接口

概念

  接口来的目的就是为了突破java单继承的局限性
  接口的好处:灵活,能够同时使用多个接口的功能
  接口主要体现的是 一套开发规范
特色
  接口中都是抽象方法
  经过interface关键字建立接口
  经过implements让子类来实现
  能够理解成,接口是一个特殊的抽象类
  接口突破了java的单继承的局限性
  接口和类之间能够多实现,接口和接口之间能够多继承
  接口是对外暴露的规则,是一套开发规范
  接口提升了程序的功能扩展,下降了耦合性
总结
  接口里没有构造方法,没有变量,都是常量
  接口里都是抽象方法(jdk1.8可有特殊的普通方法)
  接口里的常量能够简写,会自动拼接public static final
  接口里的方法能够简写,会自动拼接public abstract

 

代码块

概念:
  代码块就是一段代码被一对花括号包起来的现象.如: {........}
  代码块随着位置的不一样,做用和意义都不一样.

静态代码块

一般用于完成项目的初始化
静态资源会随着类的加载而加载,第一时间加载进内存,并一直贮存在内存中,直到类消失静态资源才消失
静态资源只会被加载一次
静态代码块,存在的位置是成员位置.如:static{....}

构造代码块
在类的内部,方法外部,的代码块
一般用于抽取构造方法中的共性代码
每次调用构造方法前都会调用构造代码块
优先于构造方法加载

局部代码块
在方法里面的代码块
一般用于控制变量的做用范围,出了括号就失效
变量的范围越小越好,成员变量会有线程安全问题
构造代码块是最优先的,局部代码块顺序执行

执行顺序
静态代码块 > 构造代码块 > 局部代码块

 

异常

概述

  用来封装错误信息的对象
  组成结构:类型,提示,行号
结构

  Throwable - 顶级父类

    -- Error:系统错误,没法修复

    -- Exception:可修复的错误

    --RunTimeException

    --ClassCastException

    --ClassNotFoundException
异常处理
  捕获方式
    try{

    须要捕获的代码

    }catch(异常类型 异常名){

    处理方案

    }
  抛出方式
    在方法声明上添加throws 异常类型1,异常类型2
    public static void main(String[] args) throws Exception{ }

 

this关键字

  当成员变量 和 局部变量 同名时,经过this关键字调用成员变量!

  能够在构造方法间 实现互相调用,this关键字在构造方法中必须是第一条语句

static关键字

特色

  能够修饰成员变量,成员方法
  随着类的加载而加载,优先于对象加载
  只加载一次,就会一直存在,再也不开辟新空间
  全局惟一,全局共享
  能够直接被类名调用
  静态只能调用静态,非静态能够随意调用
  static不能和this或者super共用,由于有static时可能尚未对象

概念

  是java中的一个关键字,用于修饰成员(成员变量和成员方法)

 

final关键字

概念
  是java提供的一个关键字
  final是最终的意思
  final能够修饰类,方法,成员变量
初衷
  java出现了继承后,子类能够更改父类的功能,当父类功能不准子类改变时能够利用final关键字修饰父类。
特色
  final修饰类 不能被继承
  final修饰方法 能够被继承,可是不能被重写
  final修饰的是常量,值不能被修改
  常量的定义形式: final 数据类型 常量名 = 值

 

容易搞混的一些东西


类与类之间的关系

继承关系
  java里只支持单根继承
  class A extends B
  其中A是子类,B是父类.子类可使用父类的全部功能
  方法的重写override:若是想要修改父类的原有功能,能够进行方法重写

接口和接口间的关系

继承关系
  接口的出现就是为了突破java单继承的局限性
  接口间能够多继承
  interface A extends B , C
  其中A是子接口,B和C是父接口
  A就拥有了B和C的全部功能,A的功能是最全的
  class Impl implements A
  Impl实现类就须要同时重写A B C 接口里的全部抽象方法,不然就是一个抽象类

抽象类和接口的区别

相同点

  抽象类和接口都是抽象层,通常用来提取共性
  都不能被实例化
不一样点
  构造方法:抽象类里有,接口里没有!!
  成员变量:抽象类里有,接口里没有,接口里都是常量!!
  成员方法:抽象类类能够有普通方法和抽象方法,可是接口里都是抽象方法(1.8后能够有)
  接口里存在简写形式,抽象类里没有.
  接口里的常量,int age = 10;会为常量自动拼接public static final
  接口里的方法,void save();会为方法自动拼接public abstract
  怎么去设计你的抽象层,究竟是体现为一个抽象类呢仍是接口呢?
    --关键就看你需不须要提供方法体,若是类里的方法都不须要提供方法体,能够设计为接口.若是类里的方法须要提供方法,设计为抽象类.
  抽象层到底设计成抽象类仍是接口,谁好呢?
    --若是实现类想要同时拥有多个功能,最好选择接口,由于接口能够多继承多实现
    --若是就是设计为抽象类,子类就只能继承一个父类,只有这么一次的继承权

 

类和接口间的关系

实现关系
  实现类能够实现接口,并且能够多实现
  class A implements B,C
  A是实现类,B和C是接口
  A须要同时重写B和C接口里的全部抽象方法,不然就是一个抽象类
  类能够在继承的同时多实现
  class A extends B implements C , D
  A能够叫子类,也能够叫是实现类
  A同时拥有父类B的功能,也同时拥有接口C和D的功能
  A须要同时重写C和D接口里的全部抽象方法,不然就是一个抽象类
  对于父类B里的方法吗?看需求,B类是父类,里面若是都是普通方法,只有须要修改才会发生重写


this和super的区别

this表明本类对象的引用,super表明父类对象的引用
this用于区分局部变量和成员变量
super用于区分本类变量和父类变量
this.成员变量 this.成员方法() this(【参数】)表明调用本类内容
super.成员变量 super.成员方法() super(【参数】),表明调用父类内容
this和super不能够同时出如今同一个构造方法里,他们两个只要出现都得放在第一行,同时出现的话,到底第一行放谁呢。


重写与重载的区别(Overload和Override的区别)

重载:是指同一个类中的多个方法具备相同的名字,但这些方法具备不一样的参数列表,即参数的数量或参数类型不能彻底相同
重写:是存在子父类之间的,子类定义的方法与父类中的方法具备相同的方法名字,相同的参数表和相同的返回类型 重写是父类与子类之间多态性的一种表现 重载是一类中多态性的一种表现

相关文章
相关标签/搜索