本质:以类的形式组织代码,以对象的形式封装数据。通过分类,将复杂问题简单化(重点在于抽象)
(对象和类的理解:从代码运行的角度:先有类再有对象,类是对象的模板;从认识论的角度:先有对象再有类,类是对对象的抽象)
三大特性:继承、封装、多态
静态方法(有static关键字),调用:类名.方法
非静态方法(没有static关键字),调用:先实例化,再对象.方法
(静态方法和类一起诞生,而非静态方法实例化后才存在)
new关键字
使用new关键字创建对象时,除了会分配内存空间以外,还会对创建好的对象进行默认初始化,以及对类中的构造器的调用
构造器
特点:和类名相同;无返回值,也不能加void;形如:public Person(){}
作用:方法的本质在调用构造器,初始化对象的值;
分类:无参构造;有参构造
(一个类中什么都不写,会自动生成无参构造;如果定义了有参构造,但是想调用无参构造,必须显示得定义无参构造)
快捷键:alt+insert
创建对象内存分析
封装(数据的隐藏)
最求“高内聚,低耦合”;属性私有get/set
关键字:private
快捷键:alt+insert
继承(本质是对一批类的抽象)
关键字:extends"扩展",子类是父类的扩展
快捷键:ctrl+H 查看继承关系
子类继承了父类就会拥有父类的全部方法
(Java中只有单继承,没有多继承:一个儿子只有一个爸爸,而一个爸爸可以有多个儿子被final修饰的类不能被继承)
Super
super调用父类的构造方法,必须在构造方法的第一个
super只能出现在子类的方法或构造方法中
super和this不能同时调用构造方法
VS this
代表的对象不同:this本身调用者这个对象 super代表父类对象的应用
前提:this没有继承也可以使用 super只能在继承条件下使用
构造方法:this()本类的构造 super()父类的构造
重写(方法的重写,和属性无关)
要有继承,子类重写父类的方法
方法名和参数列表必须相同,只是方法体不同
修饰符:范围可以扩大但不能缩小public>protected>default>private
异常:范围可以缩小但不能扩大
快捷键:alt+insert :override
必须是非静态方法:不能加static
不能被重写的方法:1.有static关键字 属于类,不属于实例 2. final关键字,不能被重写
VS重载 :方法名相同,参数列表不同
多态(方法的多态)
含义:同一方法可以根据放送对象的不同而采取多种不同的行为方式
一个对象的实际类型是确定的,但可以指向对象的引用类型的类型确有很多
父类和子类有联系(类型转换异常ClassCastException)
存在条件:继承关系,方法需要重写,父类引用指向子类对象 Father f1=new son()
在使用多态后的父类引用变量调用方法时,会调用子类重写后的方法
把子类转换为父类,直接转换;把父类转换为子类需要强制转换
多态成员变量(运行看左边) fu a=new zi() a.变量 a是fu中的值 调用的是1父类的变量
多态成员方法(编译看左边,运行看右边) fu a=new zi() a.test() f1的门面类型是Fu,但实际类型是Zi,所以调用的是重写后的方法。
关键字:instanceof 判断是否有直接或间接的父子关系 引用对象名 instanceof 某个类
Static(修饰的属性或者方法是和类一块加载的)
在执行构造器之前,会先运行代码块,所以构造器并不是最先运行的,最开始是静态代码块,然后是匿名代码块。需要注意的是静态代码块只会运行一次,静态代码块和类一块加载。所以就算main函数为空,静态代码块也会执行
抽象类 (起约束作用,子类需要重写父类的抽象方法)
关键字:abstract
抽象类不能被new 出来,必须由它的子类来实现,子类必须重写父类的抽象方法
抽象类中可以写普通的方法
抽象的方法必须放在抽象类中
接口
关键字:interface
特点:接口中的方法都是抽象的public方法(类型前面自带public abstract) 接口中的属性都是常量 (前面自带public static final)
需要一个类来实现,类 implements 接口,接口 可以弄多个接口,这样就实现伪多继承,只是伪,Java中还是只有单继承的
起约束作用
定义一些方法让不同的人去实现
接口不能被实例化,接口中没有构造方法
必须要重写接口中的方法
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)