疯狂java


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

Java类的继承


 

   

  Java的继承具有单继承的特点,每个子类只能有一个直接父类。

  语法格式:

  修饰符 class SubClass extends SuperClass

  {

  //类定义部分

  }

  在继承中,继承的叫做子类,被继承的叫做父类。子类是对父类的扩展,将可以获得父类的全部成员变量和方法。

  a.重写父类的方法:

  复制代码

  public class Bird

  {

  public void fly()

  {

  System.out.println("我在天空中飞");

  }

  }

  public class Test extends Bird

  {

  public void fly()

  {

  System.out.println("我在地上跑");

  }

  public static void main(String[] args)

  {

  Test ts = new Test();

  //下面执行的是Test类中的fly()方法

  //输出我在地上跑

  ts.fly();

  }

  }

  复制代码

  这中子类包含与父类同名方法的现象被称为方法重写(Override),也成为方法覆盖。

  如果需要在子类中调用被覆盖的同名父类方法,需要怎么办呢?这时候需要使用super限定。(但是如果父类的方法是具有private访问权限的,则该方法对于子类是隐藏的,因此子类无法访问父类中被覆盖的方法。)

  b.super限定

  复制代码

  class Baseclass

  {

  int a = 5;

  }

  public class Subclass extends Baseclass

  {

  int a = 7;

  public void test1(){

  System.out.println(a);

  }

  public void test2(){

  System.out.println(super.a);

  }

  public static void main(String[] args)

  {

  SuberClass sc = new Subclass();

  //输出7

  sc.test1();

  //输出5

  sc.test2();

  }

  }

  复制代码

  super用于限定该对象调用它从父类继承得到的视线实例变量或方法。正如this,不能出现在static修饰的方法中一样,super也不能。static修饰的方法是属于类的,该方法的调用者可能是一个类,而不是对象,因而super限定也就失去了意义。

  c.调用父类构造器

  在一个构造器调用另一个重载的构造器使用this调用来完成,在子类构造器中调用父类构造器使用super调用来完成。

  复制代码

  class Base

  {

  public double size;

  public String name;

  public Base(double size, String name)

  {

  this.size = size;

  this.name = name;

  }

  }

  public class Sub extneds Base

  {

  public String color;

  public Sub(double size, String name, String color)

  {

  //使用super调用父类构造器的初始化过程

  super(size,name);

  this.color = color;

  }

  public static void main(String[] args)

  {

  Sub s = new Sub(5.6,"测试对象","红色");

  System.out.printin(s.size+","+s.name+","+s.color);

  }

  }

  复制代码