Java知识整理(二)之OOP

面向对象:封装,继承,多态
封装:
属性私有化,给外部提供访问属性的共有方法。
对象:类的实例化 属性和方法依赖对象存在 this代表当前对象
引用类型的数组,用之前不仅要给数组初始化(分配数组长度),还要给数组元素初始化(new 对象,否则空指针)
默认添加无参构造器,前提是该对象类无构造器
构造器:方法名和类名一致,并且没有返回值类型,每个类都有构造器,作用:给对象属性初始化
构造器可以相互调用,但是不能出现死循环。 this();调用自己的构造器(无参构造器)
习惯:实体类先把无参构造器写上(无论无参构造器需不需要)
局部代码块:局部位置,用于限定变量的生命周期
构造代码块:在类的成员位置,每次调用构造都执行,并且在构造方法前执行,多个构造方法中相同的代码
存放到一起,对对象进行初始化
静态代码块:一般是对类进行初始化, 同一个类中,静态代码块在main方法前执行(不论顺序)
继承:java语言不支持多重继承,一个类只能继承一个父类,一个父类可以有多个子类
1.子类继承父类,就继承了父类所有的属性和方法
2.子类对象创建之前,先创建父类对象
3.子类构造器默认调用父类的无参构造器:super();
子类方法可调用super.方法();
private修饰的成员变量和方法仅仅只能在本类中调用;
public修饰的成员变量和方法可以在任何地方调用
protected:子类或同包能够访问
方法签名:方法名,参数
方法重载Overload:在一个类中,方法名一样,参数不一样(参数个数,类型,顺序不一样);静态方法不会重载
方法重写Override:方法签名(方法名,参数)相同
重写和返回值类型的关系:返回值类型必须一样;如果是引用类型,子类方法的返回值类型必须是父类的返回值
类型的子类或相同。
重写和访问控制符的关系:子类重写的方法必须比父类的方法更开放。
静态的方法不存在重写,父类的私有方法不能被重写
多态: Father f = new Child();
多态:编译看左边,运行看左边(成员变量,静态方法),运行看右边(成员方法)
在同一个类中,通过方法的重载实现多态


抽象:
抽象方法和抽象类
由abstract修饰的方法为抽象方法,抽象方法只有方法的定义,没有方法体实现,用一个分号结尾;
一个类中如果包含抽象方法,该类应该用abstract关键字声明为抽象类;
如果一个类继承了抽象类,必须重写其抽象方法(除非该类也声明为抽象类)
abstract class abs{
public abstract void method();
}
抽象类不可以实例化,即使一个类中没有抽象方法,也可以将它定义为抽象类
abstract和final关键字 不可以同时修饰一个类,final使得类不能被继承,而abstract修饰的类
如果不继承将没有任何意义
一个类继承了抽象类后必须重写其抽象方法
抽象类的意义:
1.为其子类提供一个公共的类型
2.封装子类中的重复内容(成员变量和方法)
3.定义有抽象方法,子类虽然有不同的实现,但该方法的定义是一致的


接口:
接口可以看成特殊的抽象类,即只包含抽象方法的抽象类
interface Runner(){
public static int DEFAULT_SPEED = 10;
public void run();
}
通过interface关键字定义接口
接口中不可以定义成员变量,但是可以定义常量
接口中之可以定义没有实现的方法(抽象方法)(可以省略 public abstract);
一个类可以通过implements关键字实现接口(多个接口用逗号分隔),
一个类实现了某个接口后,必须实现该接口中定义的所有方法。
接口可以作为一种类型声明变量,一个接口类型变量可以引用实现了该接口的类的对象,
通过该变量可以调用该接口中定义的方法(具体的实现类提供了方法的实现)。
例:Collection c = new ArrayList();(c只能用Collection中有的方法)
接口的继承:子接口继承了父接口中定义的所有方法


内部类:一个类(Inner)定义在另一个类(Outer)的内部,对外不具备可见性,Inner可以调用Outer的
如果一个类定义在了一个方法中,要调用该方法中的变量(该类与该变量同级,那么该变量要用final修饰)
成员和方法(包括private)
匿名内部类:Action action = new Action(){};


static:静态的,不依赖对象存在的
1.修饰属性:属性每次改变都保存,类名可直接调用该属性
2.修饰方法:静态方法内不能使用非静态属性及方法
3.修饰代码块:静态代码块最先调用,只调用一次。被加载就被执行
4.修饰类:内部类
final:
1.修饰属性:常量,不能被修改(常量命名规范:全部大写),引用类型的常量只需保证引用不变
2.修饰方法:不能被重写
3.修饰类:不能被继承
什么时候类会被加载?
1.实例化对象时 Child cd = new Child();
2.使用它的静态属性,方法
3.实例化子类对象时,父类会被加载
4.使用子类的静态属性,静态方法,父类会被加载
5.反射相关
类加载过程(1.创建类的对象2.调用类的静态属性和方法3.创建该类的子类对象时):(加载)Zi z = (实例化) new Zi();
用到某一个类就加载,懒惰式加载(只加载一次);
1.将类中的方法加载到方法区
2.将类中的静态属性开辟空间并初始化(0,null)
3.静态属性进行赋值操作并同时执行静态代码块(谁在前谁先执行)
对象实例化的过程:
1.在堆中开辟空间,给非静态属性开辟空间并初始化
2.给非静态属性赋值并同时执行非静态代码块,从上至下
3.最后调用构造器,递归调用(先父后本) 父类构造器在2之前
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值