疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

Java基础继承实现


 

   

  继承的概述

  多个类中存在相同属性和行为时,将这些内容抽取到 单独一个类中,那么多个类无需再定义这些属性和行 为,只要继承单独的那个类即可。

  多个类可以称为子类,单独这个类称为父类或者超 类。

  子类可以直接访问父类中的非私有的属性和行为。

  通过extends 关键字让类与类之间产生继承关系。

  class SubDemo extends Demo{}

  继承的出现提高了代码的复用性。

  继承的出现让类与类之间产生了关系,提供了多态的前提。

  Java只支持单继承,不支持多继承。一个类只能有一个父类,不可以有多个父类。

  如:

  class SubDemo extends Demo{} //ok

  class SubDemo extends Demo1,Demo2...//error

  Java支持多层继承(继承体系)

  class Persion

  {

  String name;

  int age;

  }

  class Student extends Persion

  {

  void Study()

  {

  System.out.println("good study");

  }

  }

  class Worker extends Persion

  {

  void work()

  {

  System.out.println("good work");

  }

  }

  class HeiMaStudent extends Student

  {

  }

  super关键字

  super和this的用法相同

  

  this代表本类应用

  

  super代表父类引用

  

  当子父类出现同名成员时,可以用super进行区分

  

  子类要调用父类构造函数时,可以使用super语句。

  //this表示本类引用,super表示父类引用,super语句放在子类构造函数的第一行。

  //注意this和super不能再同一行,因为初始化动作先做。

  //子类的实例化过程。

  //子类所有的构造函数,默认都会访问父类中空参数的构造函数,因为子类的构造函数内第一行都有一句隐藏的super()

  //当父类中空参数的构造函数时,子类必须通过super()语句形式来指定访问父类的构造函数,

  //当然子类的构造函数第一行this()语句来访问本类的构造函数。子类中至少有一个构造函数会访问父类中的构造函数。

  class ExtendsDemo2

  {

  public static void main(String[] args)

  {

  System.out.println("Hello World!");

  zi z=new zi();

  z.show();

  }

  }

  class fu

  {

  fu()

  {

  System.out.println("fu");

  }

  int num=4;

  }

  class zi extends fu

  {

  int num=5;

  zi()

  {

  //super();//隐藏了, 调用父类中的构造函数

  System.out.println("zi");

  }

  void show()

  {

  System.out.println("zinum="+num);

  System.out.println("funum="+super.num);//输出父类的num

  }

  }

  函数覆盖(Override)

  子类中出现与父类一模一样的方法时,会出现覆盖操作,也称为重 写或者复写。

  父类中的私有方法不可以被覆盖。

  在子类覆盖方法中,继续使用被覆盖的方法可以通过super.函数名获取。

  覆盖注意事项:

  覆盖时,子类方法权限一定要大于等于父类方法权限

  静态只能覆盖静态。

 

  覆盖的应用:

  当子类需要父类的功能,而功能主体子类有自己特有内容时,可以复写父类中的方法,这样,即沿袭了父类的功能,又定义了子类特有的内容。

  子类的实例化过程

  子类中所有的构造函数默认都会访问父类中空参数的 构造函数

  因为每一个构造函数的第一行都有一条默认的语句 super();

 

  子类会具备父类中的数据,所以要先明确父类是如何 对这些数据初始化的。

  当父类中没有空参数的构造函数时,子类的构造函数 必须通过this或者super语句指定要访问的构造函数。

  final关键字

  final可以修饰类,方法,变量。

 

  final修饰的类不可以被继承。

  final修饰的方法不可以被覆盖。

  final修饰的变量是一个常量。只能被赋值一次。

 

  内部类只能访问被final修饰的局部变量。