- 类和接口;类只能单继承; 而接口可以继承接口,可以多继承;
- 抽象类和接口的区别:
- 抽象类可以用abstract修饰;
- 接口:public interface jiekouname(){};接口中的抽象方法只能是public abstract修饰;
- 接口中的成员变量只能是public static final 修饰;接口中不能含有static修饰代码块和static修饰的方法
- 一个类只能继承一个抽象类,但可以继承多个接口
- 记忆:单继承多实现
- 接口常用情况:
- 写个空接口,没有任何抽象方法,仅仅用来标记;
- 抽象类:
- 抽象类可以继承抽象类;类可以继承抽象类,但必须实现抽象方法;抽象类中可以含成员方法,也可含抽象方法;
- 抽象方法书写:public abstract void f(); 抽象方法中不能用private和static修饰
- 抽象类使用场景:
- 可以将继承抽象类的类实例赋值给抽象类对象,然后调用抽象类的成员变量和成员方法;
- static 修饰的方法:
- 可以用对象点和类名点访问;static修饰属于类,而非static修饰的属于对象;
- static只能访问static的变量方法,而非static可以访问static的
- static方法不能被覆盖,该类的子类不能有同名同参数的方法
- 多态定义:同一行为不同状态,同一接口不同实例执行不同操作;
- 不同类继承抽象类,然后实现相应方法,当创建某一个类实例时,把它赋给抽象类对象,通过instanceof判断属于哪一类,然后进行类型转换,转换为具体莫一类实例,然后调用该类的方法;
- 多态的多种状态分支结构:所有创建的实例赋值给抽象类对象后,判断抽象类对象属于哪一条原型链上,然后把该抽象对象转为具体某一类的实例,然后进行调用相应方法,实现方法任意调用;
- 记:通过抽象对象调用同一个方法,然后会执行该类对应的方法;
- 虚方法:
- 使用关键字super便是调用的子类对象重写的父类方法;*不太对
- 如果调用父类方法,则需要创建父类对象,进行调用;或super点父类方法名
- 重写:
- 应用场景:子类继承父类,相同方法名放回类型参数列表即为重写;
- 条件:
- static修饰的方法不能重写,可以再次声明;private和final修饰的方法不能重写
- 重写后权限不能更低:如父类为public,子类不能为protected
- 同一包:可重写除private和final之外的所有;不同包:可重写public和protected的非final
- super()使用:在子类中用supe点方法名 调用父类方法;
- 重载:
- 方法名同,放回类型,参数列表,修饰符,异常类型不同;
- 重写与重载区别:重写是子类与父类的多态表现;重载是类的多态表现;
- 封装:
- 用getter和setter方法获取设置类变量,保护数据不被随意修改;
- 用private和protected等设置变量权利,保护不能被随意修改
- 内部类共四种:成员内部类、局部内部类、静态内部类、匿名内部类
- 成员内部类
- 内部类依赖于外部类存在,内部类可以访问外部类的所有资源,无论是private,static等
- 内部类有和外部类相同的变量名方法时,会发生隐藏,即:默认访问的是内部类的成员变量和方法。
- 外部类要访问内部类变量和方法,只有通过外部类.this.(内部类)成员变量和方法。
- 一般是在外部类创建成员方法,返回一个内部类实例,通过调用该方法得到内部类实例,再通过实例可以访问内部类的资源;如果在最外面创建内部类实例则:外部类.内部类 a=外部类实例.外部获取内部类实例的方法 或者 外部实例.new inclass();
- 内部类可以有常见的修饰符,private只能在内部类的内部访问;public是所有,protect是同一包中;
- 局部内部类
- 定义:定义在方法中的类,不能有修饰符。像方法中的变量一样;作用域在方法中;
- 匿名内部类
- 常见的就是安卓的监听,在方法中使用new 重写监听方法。匿名内部类使用最多,维护特别方便;
- 匿名内部类也是不可以有访问修饰符和static的
- 唯一没有构造器的类
- 静态内部类
- 和成员内部类区别在于,多个static;可以不通过对象,直接通过类名进行访问;但内部类只能访问外部中static修饰的变量和方法。static只能掉static,而非static可以调static;也是就说非static属于某一个具体实例,而static属于某一类;
- 内部类的继承问题
- 需要在继承内部类的类的构造方法中加外部类对象.super();