Java三大特性 ---- 继承
继承背后的思想是基于已经存在的类来构建新类,当从已存在继承时,就重用了它的方法和属性,还可以添加新的方法和属性来定制新的类以应对新的需求。从其他类导出来的类叫子类,被导出来的类叫父类。在java中,除了Object类之外,所有类都是子类,都有唯一的父类。
类之间的关系:
- Is-a 继承体现
- Has-a组成体现
- Like-a实现接口的体现
继承意义:
- 代码重用
- 体现不同的层次
继承的优点:
- 代码重用
- 父类字段和方法可用于子类
- 从抽象到具体形成类的继承体现
- 可轻松定义子类。
继承使用的关键字 —extends
例子:
package com.javabase.lx;
/**
* 继承的一个小例子
*/
public class Demo01 extends Father {
@Override
public void play() {
super.play();
}
public void run(){
System.out.println("喜欢跑步");
}
public static void main(String[] args) {
Demo01 son = new Demo01();
son.play();
son.run();
System.out.println(son.name);
System.out.println(son.body);
}
}
class Father{
public String name = "张";
public String body = "胖";
public void play(){
System.out.println("喜欢打球");
}
}
从上述的例子中,有一些关键字和注解比如super,this,@Override。
super关键字:
- super就是父类对象的引用
- 当父类的成员出现子类成员同名时,可以使用super关键字来进行区分
- 子类的构造方法中,通过super关键字调用父类的构造方法,父类的构造方法是优先于子类的构造方法进行实例化。
package com.javabase.lx;
public class Demo02 extends F {
{
System.out.println("子类构造代码块");
}
static {
System.out.println("子类静态代码块");
}
public Demo02(){
System.out.println("子类的构造方法");
}
public static void main(String[] args) {
Demo02 d2 = new Demo02();
}
}
class F{
{
System.out.println("父类构造代码块");
}
public F(){
System.out.println("父类的构造方法");
}
static {
System.out.println("父类静态代码块");
}
}
执行结果:
所有说父类的构造方法是优先于子类的构造方法,父类的静态代码块也是优先于子类静态代码块,子类构造代码块也是优先于子类构造代码块。
this关键字作用:
- 用于引用本类的成员变量
在构造方法中
public String name;
public test(String name){
this.name = name;
}
- 调用类的构造方法
public String name;
public Demo03(){
this("xxx");
}
public Demo03(String name){
}
- 作为返回对象的值
return this; 相当于 return 类名;
方法重写
方法重写是指子类可以根据需要对父类继承来的放法进行改写,是多态机制的前奏。
方法重写的注意点:
- 重写方法和被重写方法具有相同的方法、参数列表和返回值。
- 重写方法不能使用比被重写方法更严格的权限。
- 在子类重写的方法中继续调用父类被重写的方法可以通过调用super.函数名去获取。
final关键字
- final可以用来修饰变量、方法、类
- final修饰的变量是一个常量。一旦赋了值就不能再修改了。(常量一般和static关键字配合使用)
- final修饰类代表此类不能被继承。
- final修饰方法代表此方法不能被重写。