为什么要继承

多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可。
此处的多个类称为子类,单独的这个类称为父类(基类或超类)。可以理解为:“子类 is a 父类

  • 类继承语法规则:
    class Subclass extends Superclass{ }
    作用
  • 继承的出现提高了代码的复用性。
  • 继承的出现让类与类之间产生了关系,提供了多态的前提。
  • 不要仅为了获取其他类中某个功能而去继承

  • 子类继承 了父类,就继承了父类的方法和属性。
  • 在子类中,可以使用父类中定义的方法和属性,也可以创建新的数据和方法。
  • 在Java 中,继承的关键字用的是“extends”,即子类不是父类的子集,而是对父类的“扩展”。

关于继承的规则
子类不能直接访问父类中私有的(private)的成员变量和方法。
图片说明

单继承

  • Java只支持单继承,不允许多重继承
  • 一个子类只能有一个父类
  • 一个父类可以派生出多个子类
class SubDemo extends Demo{ }   //ok
class SubDemo extends Demo1,Demo2...//error

练习:(1)定义一个ManKind类,包括
成员变量int sex和int salary;
方法void manOrWorman():根据sex的值显示“man”(sex==1)或者“women”(sex==0);
方法void employeed():根据salary的值显示“no job”(salary==0)或者“ job”(salary!=0)。
(2)定义类Kids继承ManKind,并包括
成员变量int yearsOld;
方法printAge()打印yearsOld的值。
(3)在Kids类的main方法中实例化Kids的对象someKid,用该对象访问其父类的成员变量及方法。

public class ManKind {
    public ManKind(){
        System.out.println("ManKind");
    }
    //当存在显示的构造方法时,类就没有默认的无参构造了,而是要使用显示的构造
    public ManKind(int sex,int salary){
        this.sex = sex;
        this.salary = salary;
    }

    int sex;
    int salary;

    public int getSex() {
        return sex;
    }

    public void setSex(int sex) {
        this.sex = sex;
    }

    public int getSalary() {
        return salary;
    }

    public void setSalary(int salary) {
        this.salary = salary;
    }

    public void manOrWomen(){
        if(this.sex == 1){
            System.out.println("man");
        }else if(this.sex == 0){
            System.out.println("women");
        }
    }

    public void employeed(){
        if(this.salary == 0){
            System.out.println("no job");
        }else{
            System.out.println("job");
        }
    }
}
public class Kids extends ManKind{


    int yearsOld;

    public int getYearsOld() {
        return yearsOld;
    }

    public void setYearsOld(int yearsOld) {
        this.yearsOld = yearsOld;
    }

    public void printAge(){
        System.out.println(this.yearsOld);
    }



    public static void main(String[] args) {
        Kids someKid = new Kids();//new Kids()是在调用Kids类的默认无参构造方法,在这个过程中就使用父类的无参构造
        someKid.setSex(0);
        someKid.setSalary(100);

    someKid.manOrWomen();
        someKid.employeed();
    }
}