1.this关键字
解决成员变量和局部变量同名问题
在成员变量前面加上this,来区分成员变量和局部变量 //例:this.name
this可以在构造方法之间进行调用,语法this()
2.继承:子类继承父类,也就继承父类的属性和方法
子类 extends 父类
3.抽象方法
没有方法体,必须用abstract修饰的方法
例: public abstract void work();
注意:抽象方法必须在抽象类中
抽象类不能实例化对象,也就是不能new
4.抽象类的使用
定义子类继承抽象类,将抽象方法进行重写,创建子类对象
5.抽象类的特点
抽象类和抽象方法都需要被abstract修饰,抽象方法一定放在抽象类中
抽象类不可以直接创建对象。原因是:调用抽象方法没有意义(抽象方法没有方法体)
只有覆盖了抽象类中的所有的抽象方法后,其子类才可以创建对象,否则子类还是一个抽象类
abstract不可以和哪些关键字一起使用:private final static
6.接口
接口是功能的集合,是一种引用数据类型,比抽象类更为抽象的类(因为抽象类中可以有普通方法和抽象方法,而接口中只能有抽象方法,不能有带方法体的普通方法)
接口只描述应该具备的方法,并没有具体实现,具体的实现由接口的实现类来实现
接口的实现类必须实现接口的全部方法,否则必须定义为抽象类。
接口的定义:public interface 接口名{
抽象方法1; //固定格式:public abstract 返回值类型 方法名(参数列表);例:public abstract void work();
//public abstract可以不写,但写不写都有,也可以选择性书写
抽象方法2;
抽象方法3;
}
接口中的成员变量的定义:要求成员变量必须是常量(也就是不可修改的)
接口中的成员变量的固定格式:public static final 数据类型 变量名=值; //前面的public static final可以省略不写,但但写不写都有
类与接口的关系:类实现接口 使用关键字implements
class 类 implements 接口{
重写接口中的抽象方法
}
类和类之间可以通过继承(extends)产生关系(类和类之间只能单继承),
类和接口之间可以通过实现(implements)产生关系(类和接口之间可以多实现),
接口和接口之间可以通过继承(extends)产生关系(接口和接口之间可以多继承,如果多继承,类中就要重写所有接口中的方法)
抽象类中的所有抽象方法和接口里的所有方法必须被子类重写吗?
不一定,关键要看子类是否是抽象类。
如果子类是非抽象类,则必须实现接口中的所有方法;
如果子类是抽象类,则可以不实现接口中的所有方法,因为抽象类中允许有抽象方法的存在
接口的多实现:
interface A interfaceB
class C implements A,B;
作为实现类C,必须全部重写两个接口的所有抽象方法,才能建立C类的对象
接口和抽象类的相同点和区别:
相同点:都位于继承的顶端,用于被其他类实现或继承
都不能直接实例化对象
包含抽象方法,子类必须重写这些抽象方法
区别:抽象类为部分方法提供实现,避免子类重复实现这些方法,提高代码重用性
接口只能包含抽象方法
一个类只能继承一个父类(可能是抽象类),却可以实现多个接口(接口弥补了java中的单继承)
多态:
多态调用的3种形式:
普通类: 父类 变量名=new 子类();
抽象类:抽象类 变量名=new 抽象类子类();
接口:接口 变量名=new 接口实现类();
多态中成员变量和成员方法的的特点:
成员变量:编译运行全看父类(父类要是没有就报错)
成员方法:如果是静态方法:编译看父类,运行父类中的静态方法
如果是非静态方法:编译看父类,运行子类中的重写方法
多态中关键字instanceof的使用:
Person p=new Student();
p instanceof Student 比较p是不是Student类型的对象,如果是,返回true