目录     

1.了解继承​

2.extends关键字​

3.继承的好处​

4.继承的弊端​

5.继承的注意事项​

​父类构造器的作用

​那么创建子类对象时,为什么会先调用父类构造方法呢?

​如果父类中没有无参构造方法,创建子类时怎么调用父类构造器呢?


1.了解继承

        继承是面向对象的三大特征之一.继承关系就如生活中的爸爸的东西,儿子可以继承下来一样.继承体现了一种"is a"的思想,比如猫咪是动物的一种,动物就是父类,猫咪则是子类.还有狗狗是动物的一种,动物就是父类,狗狗则是子类.

        在java中,多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可,而这个类就是父类。就比如猫咪和狗狗都会睡觉.抽取到动物类中就可以.动物类就是父类.单独的这个类称为父类,基类或者超类;这多个类可以称为子类或者派生类。在java中,子类可以继承父类的成员.

2.extends关键字

通过extends关键字可以实现类与类的继承
格式:  class 子类名 extends 父类名 {}  

来个继承的案例哈!定义父类Person,子类Student和Teacher.子类Student和Teacher继承父类Person.

当子类不满足父类的功能,子类就会重写父类的功能!(重写的相关介绍   ------ >  点击这里)

public class Person {             //父类
    String name;
    public void eat(){
        System.out.println("吃饭");
    }
    public void sleep(){
        System.out.println("睡觉");
    }
    public void yule(){
        System.out.println("喜欢打牌");
    }

}
public class Student extends Person {    //Student继承Person类
    @Override
    public void yule() {                  //重写并沿袭父类功能
        super.yule();
        System.out.println("学生打游戏");
    }

    public void study(){                 //子类独有的方法
        System.out.println("学习!");

    }
}
public class Teacher extends Person{
    public void teach(){               //子类独有的方法
        System.out.println("教书");
    }
    @Override
    public void yule() {               //方法完全重写
        System.out.println("老师看书!");
    }
}
public class Test {
    public static void main(String[] args) {
        Student student=new Student();
        student.name="张三";
        System.out.println(student.name);
        student.sleep();             //继承父类的方法
        student.study();             //Student类独有的方法
        student.yule();              //Student类重写后的方法

        System.out.println("==================");

        Teacher teacher=new Teacher();
        teacher.name="李四";
        System.out.println(teacher.name);
        teacher.eat();               //继承父类的方法
        teacher.teach();             //Teacher类独有的方法
        teacher.yule();              //Teacher类重写后的方法
    }
}


//输出结果
/*
张三
睡觉
学习!
喜欢打牌
学生打游戏
==================
李四
吃饭
教书
老师看书!
*/

3.继承的好处

  • 提高了代码的复用性(将多个类中相同的属性和行为抽取到单独一个类中)
  • 提高了代码的维护性(需要修改多个子类的共同功能时,只需要修改父类中的功能即可)
  • 是多态的前提(多态只能在继承环境中产生)

4.继承的弊端

让类与类之间产生了关系,类的耦合性增强了。
开发的原则:高内聚,低耦合。(类与类的关系越松散(低耦合),并且独立完成某件事情的能力越强(高内聚)越好)

5.继承的注意事项

  • Java只支持单继承,不支持多继承。(只能有一个父类)
  • Java支持多层继承(继承体系)(就是子类有一个父类,而父类又有一个它自己的父类,对于子类来说就是继承了两层父类,继承了父类的父类!)
  • 子类只能继承父类所有非私有的成员(成员方法和成员变量),私有的不能继承
  • 子类不能继承父类的构造方法,但是可以通过super关键字去访问父类构造方法。
  • 不要为了部分功能而去继承(毕竟继承会增加耦合性,扩展力会变差)

(补:Object类时所有类的顶层父类,所有类都直接或间接继承该类哦!)

父类构造器的作用

创建子类对象时,会先调用父类的构造方法,完成父类的数据初始化!

public class Animal {         //父类
    //父类构造方法
    public Animal(){
        System.out.println("父类构造方法调用了!");
    }
}
public class Cat extends Animal {     //子类继承父类
   //子类构造方法
    public Cat(){
        System.out.println("子类构造方法调用了");
    }

}
pubic class Test{
public static void main(String[] args) {
    Cat cat=new Cat();
   }
}

那么创建子类对象时,为什么会先调用父类构造方法呢?

        因为子类继承了父类的数据,甚至还要使用父类的数据,那如果说,父类没有先完成数据的初始化,子类何谈继承父类的数据,甚至要使用父类数据呢。所以我们在创建子类对象时,应该先完成父类数据的初始化,怎么完成,先调用父类的构造来完成父类数据的初始化。

如果父类中没有无参构造方法,创建子类时怎么调用父类构造器呢?

方法一:  在父类中添加一个无参的构造方法
方法二:  子类通过super去显示调用父类的带参的构造方法

(补: 子类通过this去调用的是本类的有参构造方法,而本类有参构造也必须首先访问父类构造方法)

注意事项:    super(…)或者this(….)必须出现在第一条语句上.

 (小编也在努力学习更多哟!以后会多多分享哒!)

希望对友友们有所帮助!!!!