继承

把多个类中相同的属性和方法提取出来定义到一个类中,然后让多个类extends这个类,这多个类就都有了这些属性和方法,这就叫继承

java中继承的表现形式 

  class 子类 extends 父类{}

  java使用extends表示继承,这样子类就有了父类的方法和属性

继承的好处与弊端:

  第一,节省了好多代码,可以让多个类共享父类代码,节约了多少动手。。。

  第二,提高了代码的维护性,修改方法,只需要修改一个父类方法,所有子类就会改变,简直不要太爽,但是也导致了修改一个类,也可能影响很多类

  第三,让类与类产生了关系,是接下来多态的前提

java中继承的特点是单继承,多重继承:

    单继承就是,一次只能有一个爹,不能同时有两个爹,也就是不能同时继承两个类

    多重继承就是,不仅可以有爸爸还可以有儿子或者爷爷  子类的父类可以继承另一个类,一直继承下去

继承的注意事项

  A:子类不能继承父类私有方法,就好像父亲有点私房钱想要自己花,儿子就无法动了,因为根本不知道他爸爸藏哪儿去了

  B:子类不能继承父亲的构造方法,但是可以通过super访问

  C:不要为了部分功能而去继承 这个就更好理解了,不能因为一些小利就乱认别人当爹

那么什么时候使用继承呢?

  继承体现的是is a的关系 比如,我是一个人,老虎是动物这样 class Animal{}  动物类    class Tiger extends Animal{} 老虎就可以继承动物类

  

public class Tiger extends Animal {
    public static void main(String[] args) {
        Tiger tiger = new Tiger();
        //子类继承父类方法
        tiger.shout();
        //子类继承父类成员变量
        tiger.age=10;
        tiger.name="东北虎";
        //tiger.weight = 30; 错误:子类无法继承父类的私有属性或方法
    }
}
class Animal{
    private int weight;
    String name;
    int age;
    void eat(){
        System.out.println("动物吃饭");
    }
    void shout(){
        System.out.println("动物在大叫");
    }
}

结果:

继承中的成员关系

  A子类父类成员变量同名的情况

      子类的成员变量名和父类成员名一样 使用super.变量名访问父类变量,直接用变量名是调用的子类的

  B构造方法

      a子类构造方法会默认调用父类无参构造(为了子类方法父类对象初始化,就好像)

      b父类中如果没有无参构造方法怎么办呢? 子类通过,通过super关键字调用

  C子类父类成员方法同名的情况

      子类成员方法和父类成员方法名一样,构成方法重写了,子类会首先调用自己的方法

      方法重写就相当于儿子不满意父亲做事方式,自己更新了一套,当然会以自己的做事方法来做,因为儿子毕竟不是他爹本人啊

public class Tiger extends Animal {
    String name = "太白虎";
    
    public Tiger() {}
    public Tiger(String name, int age) {
        super(name, age);//如果父类无参构造,没有这一句就会报错,有的话,父类会默认调用无参,所以,子类构造方法需要调用父类构造
    }
    void eat(){
        System.out.println("老虎爱吃小动物");
    }        
    public static void main(String[] args) {
        Tiger tiger = new Tiger();
        //子类继承父类方法
        tiger.shout();//动物在大叫
        //子类调用自己重写方法
        tiger.eat();//老虎爱吃小动物
        System.out.println(tiger.name);//子类调用自己的name 因为它本身有name
        System.out.println(tiger.age);//子类调用父亲的age,因为它没有age  
        //子类调用方法或者变量 首先看看自己有没有这个方法或者变量,没有就找父类的
        
    }
}
class Animal{
    String name="太黑虎";
    int age=6;
    
    public Animal() {}
    public Animal(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
    void eat(){
        System.out.println("动物吃饭");
    }
    void shout(){
        System.out.println("动物在大叫");
    }
}

结果如下:

OK 今天我的感悟就到这了     

原文地址:https://www.cnblogs.com/jiawenxu/p/6822640.html