定义
就是子类继承父类的属性和行为,使得子类对象具有与父类相同的属性、相同的行为。子类可以直接访问父类中的非私有的属性和行为。
好处
extends 关键字,可以声明一个子类继承另外一个父类
class 父类 { ... } class 子类 extends 父类 { ... }
成员变量不重名无影响,子父类中出现了同名的成员变量时,在子类中需要访问父类中非私有成员变量时,需要使用 super 关键字,修饰 父类成员变量,类似于之前学过的 this 。
使用格式:
super.父类成员变量名
代码
class Fu { // Fu中的成员变量。 int num = 6; } class Zi extends Fu { // Zi中的成员变量 int num = 9; public void show(){ //访问子类的sum System.out.println(sum); //访问子类的sum System.out.println(this.sum); //访问父类的sum System.out.println(super.sum); } } class ExtendsDemo03 { public static void main(String[] args) { // 创建子类对象 Zi z = new Zi(); // 调用子类中的show方法 z.show(); } } //运行结果为 996
成员方法不重名无影响,如果子类父类中出现重名的成员方法,这时的访问是一种特殊情况,叫做方法重写 (Override)。
果,也称为重写或者复写。声明不变,重新实现。
而进行扩展增强。
public class Fu { //Fu类的成员方法 public void show(){ System.out.println("fu"); } } public class Zi extends Fu{ //Zi类的成员方法 public void show(){ //沿袭父类方法 super.show(); //重新实现 System.out.println("zi"); } } public class Demo02 { public static void main(String[] args) { // 创建子类对象 Zi zi = new Zi(); // 调用子类中的show方法 zi.show(); } }
父类中的方法,被它的子类们重写,子类各自的实现都不尽相同。那么父类的方法声明和方法主体,只有声明还有意义,而方法主体则没有存在的意义了。
我们把没有方法主体的方法称为抽象方法,包含抽象方法 的类就是抽象类
抽象方法
使用 abstract 关键字修饰方法,该方法就成了抽象方法,抽象方法只包含一个方法名,而没有方法体。
定义格式:
修饰符 abstract 返回值类型 方法名 (参数列表);
抽象类
如果一个类包含抽象方法,那么该类必须是抽象类。
定义格式:
abstract class 类名字 { }
继承抽象类的子类必须重写父类所有的抽象方法。否则,该子类也必须声明为抽象类。最终,必须有子类实现该父 类的抽象方法,否则,从最初的父类到最终的子类都不能创建对象,失去意义。
代码
public abstract class Fu { public abstract void show(); } public class Zi extends Fu{ @Override public void show() { System.out.println("zi"); } } public class Demo03 { public static void main(String[] args) { Zi zi = new Zi(); zi.show(); } }
参考资料:
《Java教程零基础入门到精通IDEA版》黑马程序员