继承
1、利用现有类(父类或基类)创建新类(子类或派生类)的过程
2、继承其实是自动共享父类非私有的属性和方法(含有父类私有属性但不能直接用,可以通过调用父类公有方法 ,来间接调用父类私有属性和方法)
3、java只支持单继承,即一个派生类只能继承于一个父类,所有类都直接或间接地继承 Object 类
4、java的继承方向是单一的,即子类可以访问父类中的非私有属性和方法,但父类不能访问子类的方法
类成员的访问权限
关键字 | 含义 |
public | 访问不受任何限制 |
protected | 包内友好,父子友好 |
缺省 | 包内友好 |
private | 只能被本类中的成员访问 |
类的访问权限
关键字 | 含义 |
public | 访问不受任何限制 |
缺省 | 包内友好 |
注意:
1、当类的修饰符为缺省时,只能包内继承
2、构造方法不能被继承
3、在实例化子类之前必须实例化父类,子类构造时会调用父类构造函数
继承中构造方法的一些概念
1、父类中的构造方法不能被继承,即便是 public 也不行
2、父类中的构造方法负责初始化父类中的属性,子类中的构造方法负责初始化子类中的属性
3、当实例化子类的对象时,必须先实例化父类,即在调用子类构造方法时,必须先执行父类中的构造方法,如果父类构造方法调用失败,子类构造方法也会失败
super关键字
1、在子类构造方法中用 super([参数]) 来调用父类中的构造方法,此时该语句必须是构造方法的第一句
2、可以用 super.成员名或方法名 来访问父类非私有成员
方法重写的一些概念
1、方法重写:在类的继承体系中,如果子类中出现于父类相同的方法(方法名相同,参数列表相同)那么就认为子类中的方法会覆盖父类中的方法,通过子类的实现的父类变量调用被覆盖的方法时,总是调用子类中的方法(new 谁调谁)
2、重写方法要注意
1)当构成方法重写时,子类中的方法重写的访问权限不能低于父类
2)当构成方法重写时,子类中方法地返回值要求跟父类相同或能够进行引用转型
引用转型:
(1)返回基本数据类型的方法重写必须返回相同的类型
(2)返回引用数据类型的方法重写返回类型必须包含被被重写方法的返回值类型(即相同或为其子类)
3、注意:方法会覆盖,属性不会覆盖
多态:同一种方法的不同实现,实现系统的扩展
1、静态多态:又叫编译时多态,一般指方法重载
2、动态多态:又叫运行时多态,一般指方法重写
多态的一些相关单词
单词 | 含义 |
polymorphism | 多态性 |
casting | 转型 |
overridden method | 方法覆盖 |
abstract | 抽象 |
interface | 接口 |
implements | 实现 |
final | 最终的 |
抽象:
1、抽象方法:当基类中要被覆盖的方法没有必要或无法实现时(不好实现),可以将此方法定义为抽象方法,即在方法前面加上 abstract 修饰符
2、抽象方法没有方法体(即没有花括号 {})
3、如果一个类中含有抽象方法,那么这个类必须被定义为抽象类,即在类前加上 abstract 修饰符
抽象的一些注意事项:
1、抽象类不能实例化(有些方法没有实现,一般通过引用子类对象来实例化)
2、抽象类的子类(派生类)应该提供对所有抽象方法地具体实现,否则这个类也必须定义为抽象类
3、抽象类中可以不含抽象方法(仍不能实例化)
4、构造方法和静态方法不能用 abstract 修饰
接口
1、如果一个类中所有方法都是抽象的,那么可以将这个类定义为接口
2、定义接口使用的关键字 interface (替代class)
3、接口中的抽象方法可以省略 abstract 修饰符
4、接口也不能直接实例化
接口的一些注意事项
1、java只允许单继承,但可以多实现(extends用来继承class,implements用来实现interface)
2、先继承后实现
3、类实现接口,接口继承接口
4、如果实现接口的类,没有实现全部接口中的所有抽象放法,那么这个类必须被定义为抽象类