面向对象

OOP:以类的方式组织代码,以对象的组织(封装)数据

三大特性:封装,继承,多态

类和对象

对象是具体的事物,类是抽象的,是对象的模板

给类进行实例化后,会进行内存空间的分配,对属性进行默认的初始化,对构造器的调用

构造器

和类名相同;没有返回值

作用:new的本质是在调用构造器:初始化对象的值

注意:定义有参构造后,想使用无参构造,要显示定义一个无参构造

堆:具体创建出来的对象

方法区:类,静态方法

栈:一些方法,和变量引用,栈----》堆

封装

属性私有:让程序更安全;隐藏代码的实现细节;统一接口;可维护性提高

高内聚:类的内部数据操作细节自己完成,不允许外部干涉

低耦合:只暴露少量方法给外部使用

继承

extends,"is a"关系,只有单继承,没有多继承

子类会拥有父类的全部公有方法与公有属性

ctrl+H快捷键可以打开继承树

如果父类没有无参构造,子类也无法写无参构造,除非在里面调用父类的有参构造,因为子类无参构造默认会调用父类的无参构造

final定义的类不能被继承

方法重写

需要有继承关系,子类重写父类的方法,父类的方法子类不一定需要或满足

  1. 方法名必须相同
  2. 参数列表必须相同
  3. 修饰符:范围可以扩大不能缩小,如父类是protected,子类可以是public但不能是private
  4. 抛出的异常:范围可以缩小不能扩大

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("正常方法");
    }
}
  1. 不能new抽象类,只能靠子类去实现它,是一个约束
  2. 可以写抽象方法和正常方法,但抽象方法必须在抽象类中
  3. 可以有构造方法,当实例化子类时,就会初始化父类
  4. 提高开发效率

接口

interface,只有规范

public interface Bett{
    int AGE=9;
    void add(String name);
}
  1. 接口中所有定义方法和属性,默认修饰符 public static final,可以省略
  2. 接口可以实现implements多继承
  3. 不能被实例化,没有构造方法
  4. 必须要重写接口中的方法
posted @ 2021-07-21 17:35  Yuriki  阅读(46)  评论(0)    收藏  举报