JavaSE OOP

面向对象程序设计

 

将数据及对数据的操作封装在一起,成为一个不可分割的整体

同时将具有相同特征的对象抽象成一种新的数据类型——

 

三大特征

面向对象最重要的三大特征:封装,继承,多态

 

封装

 

将数据和行为组合在一起,并对对象的使用者隐藏实现方式

保护类中的数据,对外部进行隐藏,向外公开访问的接口,外部通过访问接口取得想要的功能

 

继承

 

子类继承(extends)父类的所有非私有成员,是一种联结类的层次模型,并允许和鼓励类的重用,它提供了一种明确表示共性的方法

单根性:Java中一个类只能继承自一个父类

传递性:父类中的非私有属性和方法子类也拥有

 

多态

指允许不同类的对象对同一消息做出响应

多态的体现:

    [1]    重载

    [2]    重写(覆写)

 

 

访问修饰符

 

对于类:

    [1]    default没有修饰符的类,只可被同一个包下的类访问

    [2]    public修饰的类可以被任何代码访问

对于属性和方法:

    [1]    private只在本类中可以访问

    [2]    default在同一个包下可以访问,就算是子类,在不同包中也不能访问

    [3]    protected只有自己和子类、同包的类可以访问,不同包的子类也只能使用方法调用protected成员

    [4]    public只要能访问到类,就可以访问

 

 

访问修饰符

 

对于类:

    [1]    default没有修饰符的类,只可被同一个包下的类访问

    [2]    public修饰的类可以被任何代码访问

对于属性和方法:

    [1]    private只在本类中可以访问

    [2]    default在同一个包下可以访问,就算是子类,在不同包中也不能访问

    [3]    protected只有自己和子类可以访问,不同包的子类也只能使用方法调用protected成员

    [4]    public只要能访问到类,就可以访问

 

实际就是文件系统中的文件夹的概念

由于同一个目录下不能有多个同名的类文件,因此包主要是用于避免同名的类的情况

每一个Java源文件都会默认导入java.lang包

 

 

 

类是一组有共同特征的对象的抽象,通过new关键字创建对象,对象是类的具体

与生活中的类别是一个概念

是Java中组织代码的基本单元

所有类都直接或间接继承自Object

类中方法重载是多态的一种体现形式

 

 

 

构造函数

 

用于初始化对象,没有返回值,与类同名

系统为每一个类自动添加一个无参构造,如果自己手动写了构造函数,则不会自动添加

构造函数不可以显式调用,系统会自动调用,子类可以用super来调用父类的某一个构造函数

 

方法参数传递

 

Java的参数传递全为值传递,不存在引用传递的说法

关于引用类型的传递如下图所示:

在堆空间中创建对象,并把堆空间中表示该对象的首地址保存在栈空间中,引用类型在传递时传递的是栈空间的值

 

可变参数

 

//调用方法时可以传递任意数量的实参,系统会把这些实参进行封装,封装成类型匹配的数组
public void change(Object... obj) {   }
//可变参数必须放在参数列表的最后一位
//该形式参数在jdk1.7后支持

 

方法的重写

 

方法重写是指在子类中重写父类的方法,需要使用@Override关键字,这也是多态的一种体现形式

[1]    方法签名必须一致(返回值,方法名,参数)、

[2]    访问修饰符必须大于或等于重写方法的访问修饰符

[3]   不能超过父类方法所跑出的异常类型

 

方法的重载

在同一个类中有同名的方法,参数不同,返回值无所谓,只要方法名相同就行

 

抽象类与抽象方法

 

1.    定义抽象类和抽象方法为abstract

2.    抽象方法是没有方法体的,也就是说没有具体实现,即没有大括号“{ }”,直接加”;”结束

3.    有抽象方法的类一定是抽象类,但抽象类不一定有抽象方法,抽象类中可以有实例方法

4.    抽象类不能实例化,只能依赖子类来创建对象去访问类中的方法,子类必须实现抽象类中的所有抽象方法,不然也必须是一个抽象类

5.    抽象方式只是定规则(约束),子类来实现规则

6.    抽象类主要用来进行类型隐藏

 

接口

 

接口(interface)是一个规则的定义,约束子类的行为

接口是设计层面的概念,往往由设计师设计,将定义与实现分离

程序员实现(implements)接口,实现具体方法

面向接口编程:在面向对象的系统中所有的类或者模块之间的交互是由接口完成

接口中只能有公开静态常量(publicstatic final)公开抽象方法(publicabstract)

接口不能被实例化,可以多个实现,用”,”分隔

子类必须实现所有抽象方法,否则必须声明为抽象类

接口与接口之间是继承,不是实现,并且可以继承多个接口

默认方法(jdk 1.8 之后出现):default type function(param) {}

 


final关键字

final可以修饰变量,方法,及类

final修饰变量:必须在声明时初始化,不能赋第二次值

final修饰方法:表示该方法不能被子类覆写,final不能abstract同时修饰一个方法

final修饰类:表示该类不能被继承,java.lang.String就是一个final修饰的类


static关键字

 

属性是群体中每个个体共享的

static成员不存放在对象对应的堆空间中,而是存在方法区中,同一个类的所有对象共享静态成员

静态成员直接通过类访问,不需要通过对象访问

静态的成员在程序编译时初始化,实例成员在创建对象时才初始化

静态成员不能直接访问实例成员,实例成员可以直接访问静态成员

静态类要求所有成员都是静态的

import static可以用于导入类的静态成员

 

 

 

单例模式

 

单例模式:一个类只能创建一个对象

步骤:

两种实现方法:

1.    懒汉式

      [1]    构造函数私有化

      [2]    在类的内部创建一个自身类的静态私有成员object

      [3]    该类的内部提供一个向外公开静态的获取自身类的对象的方法,判断object是否为空,若为空,则先创建对象再返回,否则直接返回object

2.    饿汉式

      [1]    构造函数私有化

      [2]    在类的内部创建一个自身类的静态私有成员object并实例化

      [3]    该类的内部提供一个向外公开静态的获取自身类的对象的方法,用于返回object

懒汉式缺陷是有线程同步的安全问题,可能会产生多个对象,因此在单线程情况下推荐

饿汉式的缺陷是提前初始化,有点影响安全

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值