您所在的位置:主页 > JAVA技术 >

Java基础继承和super的用法

时间:2015-04-11 16:32来源:未知 作者:疯狂java 点击:

  Java基础继承和super的用法

  继承的关键字:extends

  格式如下: class 子类名 extends父类名{

  ...

  }

  例如 学生是继承人类这一父类的.

  class student extends person{

  ...

  }

  如果一个类的声明没有使用关键字extends,则这个类默认是继承Object类的.Object是所有类的父类.Object是java.lang包中的类.

  当一个子类继承了一个父类时,子类可以调用父类中的所有方法和成员变量.子类也可以单独自己声明方法或者变量.

  下面的代码创建了4个class.分别是Dog,Cat,Animal和包含主函数的Main类.其中Dog和Cat是继承父类Animal的.

  Cat继承Animal类:

  package com.cnblogs;

  public class Cat extends Animal{

  //不带参数的默认构造器

  public Cat(){

  //super();必须出现在构造方法的首行. //this();也如此.

  super();

  // super("XX",10); 该代码表示调用父类带参的构造器

  System.out.println("Cat构造器"); }

  /* public String name;

  public int age;

  public void walk(){

  System.out.println("Cat....walk");

  }

  public void sleep(){

  System.out.println("Cat....sleep");

  } */

  //注解提示

  @Override

  public void how(){

  System.out.println(name +" "+ "Cat....miaomiao");

  //super 强制调用父类的show()方法法.

  //如果没有super,show();是this.show();的默认写法.

  //步骤是:先调用子类的show()方法.子类如果没有show方法才调用父类的show()方法

  super.show();

  }

  public void show(){

  System.out.println(name +" "+ "Cat----->show");

  }

  }

  声明Dog类:

  package com.cnblogs;

  public class Dog extends Animal {

  /*public String name;

  public int age;

  public void walk(){

  System.out.println("Dog....walk");

  }

  public void sleep(){

  System.out.println("Dog....sleep");

  } */

  public void how(){

  System.out.println(name +" "+ "Dog....wangwang"); }

  }

  创建一个Animal的父类:

  package com.cnblogs;

  //Animal不写继承就是默认继承Object类. //抽象类不能new.传入的是子类的实例对象.

  public abstract class Animal extends Object{

  public String name;

  public int age;

  //默认的不带参的构造器

  public Animal(){

  this("baobao",2);

  //this();调用的是下面带参的Animal的方法

  System.out.println("Animal--->()");

  }

  //带参的构造器.给属性赋初始值

  public Animal(String name,int age){

  this.name = name;

  this.age = age;

  System.out.println("Animal--->(name,age)");

  }

  public void walk(){

  System.out.println(name + "---->walk");

  sleep();

  how();

  //this.show 调用的是子类的show()方法,如果子类没有show()方法.在调用父类的show()方法.

  this.show();

  }

  public void sleep(){

  System.out.println(name + "---->sleep");

  }

  //抽象方法.

  public abstract void how();

  public void eat(){

  System.out.println(name + "---->Eat");

  }

  public void play(){

  System.out.println(name + "---->Play");

  }

  public void show(){

  System.out.println(name +" "+ "Animal---->show");

  }

  }

  Main类(包含主函数):

  package com.cnblogs;

  public class Main {

  public static void main2(String[] args) {

  //生成一个cat对象

  Cat cat = new Cat();

  cat.name ="xiaohua";

  cat.age = 3;

  cat.walk();

  cat.how();

  //生成一个dog对象

  Dog dog = new Dog();

  dog.name = "xiaomei";

  dog.age= 3;

  dog.walk();

  dog.eat();

  dog.how();

  //调用的是调出来的对象

  Animal animal = new Cat();

  animal.name = "HH";

  //调用的是子类Cat()的how()方法.

  animal.how();

  Animal animal2 = new Dog();

  animal2.name = "XX";

  //调用的是子类Dog()的how方法

  animal2.how();

  animal.walk();

  //GetMsg方法要求传入的是子类cat,所以传入的必须是cat,而不能是animal.

  GetMsg(cat);

  GetMsg(dog);

  GetMsg(animal2);

  }

  /* public static void GetMsg(Cat cat){

  cat.how();

  }*/

  //将子类的对象传入给父类的引用 //比上面的传入单独的cat灵活,一般使用下面这种方法

  public static void GetMsg(Animal animal){

  animal.how();

  }

  /** *1. new一个对象以后先调用子类Cat的第一个方法,运行super();调用父类Animal的第一个方法

  *2. 父类中的构造方法执行this();方法,this方法又调用Animal带参数的方法并输出;在返回不带参的构造器执行this();下面的输出语句

  *3. 在返回子类Cat中执行super();下面的语句,输出"Cat构造器"

  *4. 接着animal.how()调用new出来的对象 cat的how()方法

  *5. 执行子类Cat()方法中的how()方法,并输出.

  *6. 接着在运行how()方法中的super().show;然后调用父类Animal的show()方法.并输出相应的结果. * */

  public static void main(String [] args){

  Animal animal = new Cat();

  animal.how(); }

  }

  super();调用父类的构造器,方法和属性.

  this();调用该方法的当前对象.