Java基础-面向对象
一、面向对象定义
- 面向对象编程(Object-Oriented Programming,OOP)
- 本质就是:以类的方式组织代码,以对象的组织(封装)数据。
- 抽象,三大特性:
- 封装
- 继承
- 多态
二、方法调用
- 静态方法,可以直接通过类名进行调用方法,是和类一起加载的。
- 非静态方法,实例化后才可以调用非静态方法,实例化之后才存在的。
- 形参和实参
- 值传递和引用传递,Java都是值传递。
- this关键字
三、类与对象的关系
- 类是一种抽象数据类型,它是对某一类事物整体的描述,但是并不能代表某一个具体的事务。
- 对象是抽象概念的具体事例。
四、创建与初始化对象
- 使用new关键字创建对象,本质是在调用构造器,用来初始化对象的值。
- 创建的时候,除了分配内存空间之外,还会给创建好的对象进行默认的初始化以及对类中构造器的调用。
- 类中的构造器也称为构造方法,是在创建对象的时候必须要调用的,并且构造器有以下两个特点:
- 必须和类的名字相同
- 必须没有返回类型,也不能写void
- 一旦定义了有参构造,无参构造就必须显示定义。
- 内存分析:图
- 对象是通过引用来操作:栈--->堆
五、封装
- 程序设计要追求“高内聚,低耦合”,高内聚就是类中的内部数据操作细节自己完成,低耦合,仅暴露少量方法给外部使用。
- 封装(数据的隐藏),禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问,这称为信息隐藏。
- 属性私有,get/set,统一接口,提高可维护性。
六、继承
- 继承本质是对某一批类的抽象,从而实现对现实世界更好的建模。
- extends的意思是“扩展”。子类是父类的扩展。
- Java中只有单继承,没有多继承!
- 继承是类与类之间的一种关系,除此之外,还有依赖、组合、聚合等。
- 子类和父类的关系是“is a”的关系,就会拥有父类的全部方法(public)。
- object类
- super:
- 调用父类的构造器必须要在子类构造器的第一行。
- 子类构造器中默认调用了父类的无参构造器。
- super必须只能出现在子类的方法或者是构造方法中。
- super和this不能同时调用构造方法。
- this代表调用者这个对象
- super代表父类对象的应用
- this没有继承也可以使用
- super只能在继承条件下才可以使用
- this(); 本类的构造
- super(); 父类的构造
- 方法重写(需要有继承关系,子类重写父类的方法):
- 父类的引用指向了子类
- 静态方法的调用只和左边,定义的数据类型有关
- 非静态方法:重写,只能是public的
- 方法名必须相同
- 参数列表必须相同
- 仅仅是方法体不同
- 修饰符:范围可以扩大但是不能缩小:public>protected>default>private
- 抛出的异常:范围可以被缩小,但是不能被扩大
- 父类的功能,子类不一定需要或者不一定满足
- static方法属于类,它不属于实例;final常量;private方法;以上都是不可以重写的
七、多态
- 即对于同一方法可以根据发送对象的不同而采用多种不同的方法。
- 一个对象的实际类型是确定的,但是可以指定对象的引用的类型可以有很多。
- 多态存在的条件:
- 有继承关系
- 子类重写父类方法
- 父类引用指向子类对象
- 多态是方法的多态,属性没有多态性
- 实际类型是父类,但是子类重写了父类的方法,执行子类的方法。
- 对象能执行哪些方法主要看对象左边的类型,和右边关系不大。
- 子类调用的方法是自己的或是继承父类的方法;父类可以指向子类,但是不能够调用子类独有的方法。
8. instanceof:
- 判断一个两个类是否有父子关系。
- 子类转化为父类,可能丢失一些本来的方法,向上转型,自动转型。
- 父类转化为子类,向下转型,强制转换。
- 方便方法的调用,减少重复的代码,简洁。
- 代码:
System.out.println(x instanceof y);//能不能编译通过,是看x和y是否具有父子关系
//输出是true还是false,是看x引用的类型是否是y的子类
9. static
- 静态变量,通过类名进行调用
- 非静态变量,通过实例进行调用
- 非静态方法可以去访问静态方法,因为静态方法是跟类一起加载的。静态方法也可以调用静态方法,但是静态方法不能够调用非静态方法,因为只有实例化的时候非静态方法才进行加载。
- 匿名代码块(赋初始值),是在构造方法前面,静态代码块是自动加载的,在匿名代码块前执行,static代码块只执行一次。
- 静态导入包import static java.lang.Math.random;,之后可以直接调用函数。
八、抽象类
- abstract修饰符可以用来修饰方法也可以修饰类,如果修饰方法,那么该方法就是抽象方法,如果修饰类,那么该类就是抽象类。
- 抽象类中可以没有抽象方法,但是一定要声明为抽象类,也可以存在普通方法。
- 抽象类,不能够使用new关键字来创建对象,它是用来让子类继承的。
- 抽象方法,只有方法的声明,没有方法的实现,它是让子类来实现的。
- 子类继承抽象类,那么就必须要实现抽象类没有实现的抽象方法,否则子类也要声明为抽象类。
九、接口
- 普通类,只有具体实现
- 抽象类,具体实现和规范(抽象方法)都有
- 接口:只有规范,自己无法写方法,专业的约束,约束与实现分离:面向接口编程
- 接口就是规范,定义一组规则,没有构造方法,public abstract;public static final
- 接口的本质是契约
- OO的精髓,是对对象的抽象,最能体现这一点的就是接口
- 声明类的关键字是class,声明接口的关键字是interface
- implements ,为了实现接口的类,就需要重写接口中的方法,多继承利用接口实现多继承
十、内部类
- 内部类可以获得外部类的私有属性、方法。
- 静态内部类没办法访问外面非静态的属性、方法了。
作者:睿晞
身处这个阶段的时候,一定要好好珍惜,这是我们唯一能做的,求学,钻研,为人,处事,交友……无一不是如此。
劝君莫惜金缕衣,劝君惜取少年时。花开堪折直须折,莫待无花空折枝。
曾有一个业界大牛说过这样一段话,送给大家:
“华人在计算机视觉领域的研究水平越来越高,这是非常振奋人心的事。我们中国错过了工业革命,错过了电气革命,信息革命也只是跟随状态。但人工智能的革命,我们跟世界上的领先国家是并肩往前跑的。能身处这个时代浪潮之中,做一番伟大的事业,经常激动的夜不能寐。”
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.