面向对象基础知识
- c语言:面向过程;c++面向对象
- 同类型变量放在一起组成数组
- 类
- 属性
- 方法
- 构造方法。
- 用于创建这个类的对象。无参的构造方法可以由系统自动创建。
- 构造器也叫构造方法constructor,用于对象的初始化。
- 注意:手动添加的构造器,系统不会自动创建,要自己加上空构造器,
- 要点
- 通过new关键字调用。
- 构造器虽然有返回值,但是不能定义返回值类型。不能在构造器里使用return返回某个值。
- 如果我们没有定义构造器,编译器会自动定义一个无参的构造函数。如果已定义则编译器不会自动添加。
- 构造器的方法名必须和类名一致。
- public point(double_x,double_y){
- x=_x;
- y=_y;
- }
- 重载
- 方法名相同,参数不同。
- 构造方法的第一句总是super()
- this表示创建好的对象。
- 程序入口(主函数)
- new一个对象
- 内存分析
- java虚拟机内存分3个区域
- 栈stack,
- 栈描述的是方法执行的内存模型每个方法被调用都会创建一个栈帧(存储局部变量操作数,方法出口等。)
- JVM为每个线程创建一个栈。用于存放该线程执行方法的信息。(实际参数,局部变量等。)
- 栈属于线程私有,不能实现线程间的共享。
- 在的存储特性是,”先进后出,后进先出。”
- 栈是由系统自动分配,速度快。栈是一个连续的内存空间。
- 堆heap,
- 堆用于存储创建好的对象和数组。(数组也是对象。)
- jvm只有一个堆被所有线程共享。
- 堆是一个不连续的内存空间。分配灵活,速度慢。
- 方法区method area又叫静态区特点如下。
- jvm只有一个方法区被所有线程共享。
- 方法区实际也是堆只是用于存储类,常量相关的信息。
- 用来存放程序中永远是不变或唯一的内容。(类信息。Class对象。静态变量字符串常量。)
- 栈stack,
- java虚拟机内存分3个区域
- 对象
- 创建的过程
- 1.分配对象空间,并将对象成员变量初始化为零或空。
- 2.执行属性值的显式初始化。
- 3. 执行构造方法。
- 4.返回对象的地址给相关的变量。
- this
- 本质建好对象的地址。
- 2.当程序出现二义性的时候。用this来区分成员变量和局部变量。
- 3.this可以调用其他构造器。构造器的调用必须放在第一句。
- this不能用于static方法中。
- 创建的过程
- 静态
- static关键字
- 在类中用static声明的成员变量为静态成员变量,也称为类变量。类变量的生命周期和类相同,在整个应用程序执行期间都有效。
- static修饰的成员变量和方法,从属于类。普通变量和方法从属于对象。
- static关键字
- 包机制
- 非注释性语句的第一句用package+包名
- 包名:域名倒着写com.jd。再加上项目名,模块名。
- 通过import导入包中的类
- import * 降低编译速度
- 静态导入
- import static system.lang.Math
- 继承
- extends 要继承的类名-------继承所有的属性和方法,但不继承父类的构造方法
- Java接口有多继承,类只有单继承,c++有多继承
- stu instenceof Stutent-------判断左面这个对象是不是右面这个类的的实例,返回布尔值
- 方法重写override
- 1.子类通过重写父类的方法,可以用自身的行为替换父类的行为。
- public Horse extends Vehicle{
- public void run(){
- system.out.println("四季纷飞")
- }
- }
- 2.返回值类型小于等于父类的类型。
- 3.方法名形参列表相同。
- 4.访问权限子类大于等于父类。
- 1.子类通过重写父类的方法,可以用自身的行为替换父类的行为。
- Object类是所有java类的根基类
- toString()方法
- 1.undefined和null没有toString()方法
- 2.布尔型数据True和false返回对应的true和false
- 3.字符串类型原值返回
- 4.
- toString()方法
- equals方法的重写
- public boolean equals(Object obj){
- 在ecliose鼠标右键,source,点击生成hashcode和equals方法
- }
- 对象内容是否相等
- public boolean equals(Object obj){
- super
- 直接引用父类。super.f()
- 封装encapsulation
- 栗子:以电视
- 访问控制符
- private表示私有,只有自己类能访问。
- 此类无法使用父类的私有属性和方法。
- default有事没有修饰符修饰。只有同一个包的类能访问。
- protected表示可以被同一个包的类以及其他包中的子类访问。
- public表示可以被该项目的所有包中的所有类访问。
- private表示私有,只有自己类能访问。
- 封装使用细节
- 1.设置属性私有
- 2.对属性设置set,get方法
- eclipse自动生成:右击——>source——>create set and get
- public class Person{
- }
- 多态
- 1.同一个方法的调用,由于对象的不同可能会有不同的行为。在现实生活中,同一个方法,具体实现会完全不同。
- 2.多态是方法的多态,不是属性的多态
- 3.三个必要条件
- 继承
- 重写
- 父类引用指向子类对象
- 4.父类引用指向子类对象后,用该父类引用调用子类重写的方法,此时多态就出现了。