1.面向对象和面向过程的区别:
面向对象 优点:易维护、易拓展、易复用,由面向对象的三大特征可以设计出低耦合的系统,使系统更加灵活,更易于维护;
缺点:性能比面向过程要低。
面向过程 优点:性能比面向对象要高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发,性能是最重要的因素;(简单一句话就是性能要比面向对象要高)
缺点:没有面向对象的易维护、易拓展、易复用。
2.面向对象的特征:
封装:把相关的数据封装成一个“类”组件,增强代码的安全性;
继承:子类自动共享父类公共的属性和方法,提高代码的复用性;
多态:父类引用指向子类对象,提高代码的灵活性;
3.访问权限控制符:
类 | 包 | 子类 | 任意 | |
public | √ | √ | √ | √ |
protected | √ | √ | √ | |
default | √ | √ | ||
private | √ |
4.封装:
通过private关键字实现,被private修饰的资源只能在本类中访问,想要修改只能对外提供get()和set()方法;
5.构造方法:
构造方法是与类名相同的方法,用来对象的初始化和成员变量的赋值,构造方法也可以构成重载;
默认存在无参构造,当提供了含参构造时最好也要声明一个无参构造;
6.this和super:
this代表本类对象的引用,构造方法中必须放在第一行,当局部变量和成员变量重名时用this来区分;
super代表父类对象的引用,用于区分本类变量和父类变量;
this和super不可以同时出现在同一个构造方法里,他们两个只要出现都得放在第一行
7.静态static:
特点:可以用来修饰方法和属性;
随着类的加载而加载,优先于对象加载,可以被类名直接调用;
只加载一次,就会一直存在
全局唯一,全局共享
静态资源只能调用静态资源,非静态资源可以随意调用;
static不能与this和super共用,因为static时还没有创建对象
static修饰方法可以被继承但不能别重写;
8.静态代码块,构造代码块,局部代码块:
静态代码块:在类加载时就会被执行,而且只会执行一次,通常用于项目的初始化;
构造代码块:在类里方法外,每次调用构造方法时都会先执行构造代码块,通过用来提取构造方法的公共代码;
局部代码块:在方法里,调用方法时会执行局部代码块,通常用于控制变量的范围
执行顺序:静态资源——构造代码块——构造方法——局部资源
9.final关键字
final修饰的类不能被继承,修饰方法不能被重写,修饰变量是常量
10.继承(extends)
java中只支持单继承,子类可以继承父类全部的公共资源;
接口可以多继承和多实现;
继承抽象类的时候如果不重写抽象方法的话,也是一个抽象的子类
11.重写和重载
发生在同一个类中,存在方法名相同但是参数列表不同的方法就构成了重载,重载提高了代码的灵活性
重写是发生在继承关系时,子类修改父类的方法时就是重写;重写时子类的修饰符要大于等于父类的修饰符,方法的返回值(基本类型要相等,引用类型的话要等于小于),方法名相同但方法体不同,重写是多态的表现
12.多态:
多态的前提是继承,要用方法的重写
父类引用指向子类对象,编译看左边吗,运行看右边
如果方法重写了就会执行子类的方法体,
如果想用子类拓展的方法可以向下造型
Animal animal = new Dog();
Dog d = (Dog)animal;
13.抽象类和接口区别
抽象类中可以有抽象方法也可以没有,继承的时候不重写抽象方法就是抽象的子类;
抽象类只能单继承,接口可以多继承和多实现;
抽象类中有抽象方法,普通方法和变量;
接口中全都是抽象方法,接口只有常量,JDK1.8以上才提供了默认的方法;
抽象类中有构造方法,接口中没有构造方法;
接口中的变量简写为 public static final int a = 1;
接口中的抽象方法简写为 public abstract void get();没有方法体
接口中的默认方法public default void get(){};