面向对象
OOP:以类的方式组织代码,以对象的组织(封装)数据
三大特性:封装,继承,多态
类和对象
对象是具体的事物,类是抽象的,是对象的模板
给类进行实例化后,会进行内存空间的分配,对属性进行默认的初始化,对构造器的调用
构造器
和类名相同;没有返回值
作用:new的本质是在调用构造器:初始化对象的值
注意:定义有参构造后,想使用无参构造,要显示定义一个无参构造
堆:具体创建出来的对象
方法区:类,静态方法
栈:一些方法,和变量引用,栈----》堆
封装
属性私有:让程序更安全;隐藏代码的实现细节;统一接口;可维护性提高
高内聚:类的内部数据操作细节自己完成,不允许外部干涉
低耦合:只暴露少量方法给外部使用
继承
extends,"is a"关系,只有单继承,没有多继承
子类会拥有父类的全部公有方法与公有属性
ctrl+H快捷键可以打开继承树
如果父类没有无参构造,子类也无法写无参构造,除非在里面调用父类的有参构造,因为子类无参构造默认会调用父类的无参构造
final定义的类不能被继承
方法重写
需要有继承关系,子类重写父类的方法,父类的方法子类不一定需要或满足
- 方法名必须相同
- 参数列表必须相同
- 修饰符:范围可以扩大不能缩小,如父类是protected,子类可以是public但不能是private
- 抛出的异常:范围可以缩小不能扩大
static修饰,private修饰,final修饰的方法是无法被重写的
静态方法:方法的调用只和左边定义的数据类型有关
多态
对象的实际类型是确定的,可以指向的引用类型不确定
Person s1=new Student();
//这里可以说s1是Student对象,但是只能用Person类里面定义的方法
子类重写了父类的方法,执行子类的方法
父类型不能调用子类独有的方法,对象能执行哪些方法,主要看对象左边的类型
存在条件:继承关系,方法需要重写,父类引用指向子类对象
类型转换
instanceof:判断两个对象是否有继承关系
x(对象) instanceof Y(类)
//x只能是对象
如果x跟Y没有一点联系(父子,爷孙等等),会直接编译报错
如果x是Y的子类或本类对象,返回true;反之返回false
只有当instanceof为真时,才能将x对象转换成Y类对象
static关键字
静态变量:使用类名.变量名调用,会有一个初始值
静态方法:类名.方法名
静态代码块:只执行一次
静态导入包:可以不用输入类名
import static java.lang.Math.PI;
static int a=10;//静态变量
public static void aa(){
System.out.println("静态方法");
System.out.println(PI);//使用静态导入包
}
static{
System.out.println("静态代码块");
}
抽象类
通过abstract修饰,可以修饰类,方法
抽象方法:只有方法名字,没有方法体,必须由子类实现,除非子类也是抽象类
public abstract class Action{//抽象类
public abstract void Some();//抽象方法
public void hh(){
System.out.println("正常方法");
}
}
- 不能new抽象类,只能靠子类去实现它,是一个约束
- 可以写抽象方法和正常方法,但抽象方法必须在抽象类中
- 可以有构造方法,当实例化子类时,就会初始化父类
- 提高开发效率
接口
interface,只有规范
public interface Bett{
int AGE=9;
void add(String name);
}
- 接口中所有定义方法和属性,默认修饰符 public static final,可以省略
- 接口可以实现implements多继承
- 不能被实例化,没有构造方法
- 必须要重写接口中的方法

浙公网安备 33010602011771号