继承与接口

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 接口体

  1. 抽象方法和常量
    所有抽象方法和static常量都是public的,可省略public、abstract、final、static修饰符。(接口中没有变量)
  2. default实例方法
    访问权限是public(可省略)
    default修饰的方法可以带方法体(default不可省略)
  3. static方法
    可以带方法体
  • 不可以用static和abstract同时修饰一个方法

2.4 接口的使用

  1. 可以直接用接口名使用static常量和方法
    例如:Printable.MAX;Printable.f();
  2. 类实现接口:
    通过关键字implements实现一个或多个接口
    例如,A类实现Printable和Addable接口:
class A implements Printable, Addable{
...
}

再如,A类的子类B类实现Printable和Addable接口:

class B extends A implements Printable, Addable{
...
}

一个类实现了某个接口时,重写default方法和abstract方法需要去掉修饰符。

注意:
  1. 类不拥有接口的static方法
2. 重写方法时不可省略public
  1. 接口也可以用extends被继承,子接口继承父接口的全部常量和方法。

2.5 接口回调

类似于上转型对象调用子类的重写方法

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容