Java中类的继承

继承

继承最主要的作用是减少代码冗余(少写很多重复的代码),实现代码的复用性
子类只能继承父类的非私有变量和方法
父类的构造方法不能被继承但能被调用

编写父类

class Pet {
  //公共的属性和方法
}

编写子类来继承父类

//Dog类继承于Pet类
class Dog extends Pet {
  //子类特有的属性和方法
}

子类访问父类成员

访问父类构造方法: super()super(param) ;访问父类成员: super.param

举个例子

创建一个父类Pet

public class Pet {
  private String name = "无名氏";
  private int love = 0;// 亲密度
  private int health = 100;// 健康值
  public Pet() {
    this.health = 95;
    System.out.println("执行宠物的无参构造方法");
  }
  public Pet(String name) {
    this.name = name;
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public int getLove() {
    return love;
  }
  public void setLove(int love) {
    this.love = love;
  }
  public int getHealth() {
    return health;
  }
  public void setHealth(int health) {
    this.health = health;
  }
  public void print() {
    System.out.println("我的名字叫" + this.name + ",我的健康值是" + this.health+ ",与主人的亲密度是" + this.love);
  }
}

创建Dog子类来继承Pet父类

public class Dog extends Pet {
  private String strain;
  public Dog(String name, String strain) {
    super(name);
    this.strain = strain;
  }
  public String getStrain() {
    return strain;
  }
  public void setStrain(String strain) {
    this.strain = strain;
  }
}

创建主类

public class ExtDemo {
  public static void main (String[] args) {
    Dog dog = new Dog("二哈", "哈士奇");
    dog.print();
  }
}

运行结果: 我的名字叫二哈,我的健康值是100,与主人的亲密度是0

分析一下代码

  private String name = "无名氏";
  private int love = 0;// 亲密度
  private int health = 100;// 健康值

先在父类Pet中定义了三个私有变量,使得这三个变量只在本类中可以被访问。

  public Pet() {
    this.health = 95;
    System.out.println("执行宠物的无参构造方法");
  }
  public Pet(String name) {
    this.name = name;
  }

为父类定义了构造方法,其中无参的构造方法里 this.health = 95 把95赋值给了本类的 health ,而在有参的构造方法里传入了一个字符串,通过 this.name = name 把传入的字符串赋给本类的 name 。这两个不同的构造方法在调用时将会得到不同的运行结果。

  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }

之后就是定义get方法和set方法,来实现其他类对父类私有变量的访问。


public class Dog extends Pet 创建Dog类来继承Pet类,即Dog类是Pet类的子类extends 关键字表示继承。

private String strain 用来定义狗狗的品种。

  public Dog(String name, String strain) {
    super(name);
    this.strain = strain;
  }

在构造方法中传入了两个变量,namestrainsuper(name) 的作用是引用父类的有参构造方法,父类的有参构造里写的是 this.name = name ,则在这里的用途是把Dog类的构造方法传入的 name 赋给了父类的 name 变量,而 this.strain = strain 是把传入的 strain 赋给当前本类的 strain 变量。接着再分别定义 getStrain()setStrain() 方法来获得和设置 strain 的值。

本例中并没有实际用到 strain 这个变量, getStrain()setStrain() 这两个方法也并未使用过。


    Dog dog = new Dog("二哈", "哈士奇");
    dog.print();

最后在主类中实例化Dog类的对象,使用有参的构造方法 public Dog(String name, String strain) 传入 name = "二哈" strain = "哈士奇" ,调用 print() 方法,这个方法在Dog类里并不存在,而是从它的父类Pet类继承而来

  public void print() {
    System.out.println("我的名字叫" + this.name + ",我的健康值是" + this.health+ ",与主人的亲密度是" + this.love);
  }

这样就得到了运行结果 我的名字叫二哈,我的健康值是100,与主人的亲密度是0

猜你喜欢

转载自blog.csdn.net/ryuudesu/article/details/84937365