1. 继承 inheritance
- java支持单继承:一个类只能有一个父类。
- 格式:
class 子类名 extends 父类名{
...
}
同一包中的继承性:
- 子类继承父类中不是private的成员变量和方法。继承的成员变量和方法访问权限不变。
非同一包中的继承性:
- 子类继承父类的public和protected成员变量和方法。
1.1 成员变量的隐藏
子类中声明的成员变量和父类中的成员变量同名,就隐藏了父类中的成员变量。
1.2 方法重写 override
- 规则:子类中定义一个方法,方法类型、方法名字、参数个数、参数类型与父类的完全相同。
- 目的:隐藏继承的方法
1.3 上转型对象
用子类创建一个对象,把这个对象的引用赋给父类的对象。
例如A类是B类的父类
A a;
a= new B();
或者
A a;
B b=new B();
a=b;
称a是b的上转型对象
- 上转型对象不能操作子类新增的成员变量和方法
- 可以将上转型对象强制转换为子类对象
B bb=(B) a;
- 不能调用子类重写的静态方法,只能调用父类的静态方法
2. 接口
2.1 属性:默认public
2.2 定义:与类的定义相似
interface 接口名字{
接口体
}
2.3 接口体
- 抽象方法和常量
所有抽象方法和static常量都是public的,可省略public、abstract、final、static修饰符。(接口中没有变量) - default实例方法
访问权限是public(可省略)
default修饰的方法可以带方法体(default不可省略) - static方法
可以带方法体
- 不可以用static和abstract同时修饰一个方法
2.4 接口的使用
- 可以直接用接口名使用static常量和方法
例如:Printable.MAX;
,Printable.f();
- 类实现接口:
通过关键字implements实现一个或多个接口
例如,A类实现Printable和Addable接口:
class A implements Printable, Addable{
...
}
再如,A类的子类B类实现Printable和Addable接口:
class B extends A implements Printable, Addable{
...
}
一个类实现了某个接口时,重写default方法和abstract方法需要去掉修饰符。
注意:
- 类不拥有接口的static方法
2. 重写方法时不可省略public
- 接口也可以用extends被继承,子接口继承父接口的全部常量和方法。
2.5 接口回调
类似于上转型对象调用子类的重写方法