面向对象概述
- 类与对象
- 构造方法
- 访问权限
- 继承
- 多态
- 抽象和接口
- 内存分析
面向对象和面向过程
- 面向过程:侧重的是过程
- 优点:简单
- 缺点:代码量大了之后,维护性非常差
- 面向对象:侧重的是对象,你是上帝视角,你创建了一个大象,告诉大象,进冰箱。
- 优点:可扩展性非常强,维护成本低。
- 缺点:新手上手难。
类与对象
- 造车:
- 画图纸
- 1.定义车的属性信息:color,speed,seat
- 2.定义车的动作:跑
- 拿着图纸找工厂生产车
- 画图纸
- 面向对象的世界里:
- 类:就是图纸
- 属性:这一事物拥有的共同属性
- 动作:之一类事物共同能执行的功能
- 对象:使用类创建的具体某一个东西
- 对象能干什么?完全取决于类是如何定义的
- 类:就是图纸
- 写代码
- 类要使用class来定义
- 属性:成员变量来描述,直接写在类中的变量。
- 动作:成员方法,不写static就是成员方法
- 创建对象:
- 类 引用= new 类();
this关键字
- this:当前类的对象
- this可以在方法内部获取到对象中的属性信息
- this还可以区分局部变量和和成员变量
构造方法
- 在创建对象的时候,自动调用的方法
- 语法
public 类名(传参):{
}
-
注意
- 1.没有返回值这一项
- 2.在我们new的时候,自动调用构造方法
-
作用:创建对象的时候,给对象设置属性信息。
-
java会默认自动的送给每一个类一个无参数的构造方法,但是,如果你写了构造方法,系统就不会在赠送了
构造方法的重载
- 构造方法也是方法,也可以进行重载
- 作用:可以有风多的方式去创建对象
- 使用this可以访问其他的构造方法
Static静态
-
静态的内容在内存中保留一份的,并且各个对象之间进行共享
-
使用p1.country = “民国”,不推荐这样使用静态变量
-
推荐使用类名访问静态的内容
-
热点:
- 1.数据共享
- 2.属于类的,并不属于对象
- 3.优先于对象产生的
访问权限
- 1.public:共有的
- 2.privat:私有的
- 3.defau:只有包内才能访问
getter和setter
- 成员变量一般使用private来声明,保护成员变量不被胡乱的赋值
- setter:主要是给成员变量赋值,做一定的保护
- getter:从成员变量中获取数据
继承
- 继承:子类可以自动拥有父类中除了私有内容外的其他所有内容
- 当出现x是一种y的时候,x就可以继承y
- 黑熊怪是一种妖怪
public class 类名 extends父类{
}
- 作用:简化代码的开发
- 子类对父类进行了扩展
super关键字
- super:表示父类中的内容
- this:表示自己类中的内容
- 用super和this来区分分父类和子类中重名的内容
- 创建对象的过程:先创建父类的对象,然后创建子类的对象
- 小总结:
- 1.super可以获取到父类中的内容
- 2.可以调用父类中的构造方法,必须写在子类构造方法的第一行,如果父类的构造函数是无参的,可以不写,如果父类没有无参的构造,必须要写super。
方法的重写
- 重写:子类对父类中提供的方法进行重新定义
- 语法:子类和父类中的方法的声明完全一致
- 重写又被成为方法的覆盖
多态
-
多态:同一个对象拥有多种形态
-
作用:把不同的数据类型进行统一,让程序具有超强的扩展性
-
小知识点:
- 1.把子类的对象赋值给父类的变量–>向上转型
- 缺点:屏蔽子类中特有的方法
- 2.把父类的变量转化回子类的变量–>向下转型
- 向下转型有可能有风险,java要求必须要写强制转换类型
- (转换之后的数据类型)变量
final
- 1.被final修饰的变量不可以被改变,又被成为常量
- 2.被final修饰的方法不可以被重写
- 3.被final修饰的类不可以被继承
抽象
- 抽象:现实中不存在的东西
- 在java中,只声明不实现
- 抽象方法:使用abstract来修饰,不可以有方法体,直接用分号结束即可
- 抽象类:如果一个类中有抽象方法,这个类必须是一个抽象类,
- 特点:
- 1.抽象类不可以创建对象
- 2.抽象类的的子类,必须重写父类中的抽象方法,否则,子类也必须是抽象类
通过抽象类可以强制的要求子类中必须有哪些方法
抽象类可以有正常的方法。
接口
-
接口实际上是一种特殊的抽象类
-
接口中所有的方法都是抽象方法
-
接口使用interface来声明
-
类只能单继承,接口支持多实现
-
接口同样具有多态性
-
接口可以把多个不想关的内容进行整合
-
特点:
- 1.接口中所有的方法都是抽象方法,都是公开的
- 2.接口中所有的变量都是全局静态变量
成员变量初始值
- java中所有的变量必须先声明,后赋值才能被使用
- java中的成员变量,在创建对象的时候,都会执行一次初始化操作,都会给一个默认值
- 基本数据类型默认值是0,包括布尔值
- 引用数据类型:null
- null表示空,什么都没有,占位
object
-
万事万物皆对象
-
所有的东西都是对象
-
在java中所有的类都要继承object
-
object是一个类,所有类的跟
-
我们写的即使不屑继承关系,那么默认也会继承object
equals和 ==
-
equals.object类提供的一个方法,用来判断两个对象是否相等
-
equals可以自己重写
-
字符串的判断一定要用equals来判断
toString方法
-
toString()对一个对象那个的字符串的表示形式
-
这个方法可以被重写
instanceof关键字
- 判断xxx独享是否是xxx类型的
参数传递的问题
- 值传递:把变量的值作为参数进行传递
- 引用传递:直接把变量作为参数进行传递
java使用的是值传递