• 继承


    把多个类中相同的属性和方法提取出来定义到一个类中,然后让多个类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 今天我的感悟就到这了     

  • 相关阅读:
    java实现第六届蓝桥杯立方尾不变
    java实现第六届蓝桥杯立方尾不变
    java实现第六届蓝桥杯隔行变色
    java实现第六届蓝桥杯隔行变色
    java实现第七届蓝桥杯交换瓶子
    java实现第七届蓝桥杯交换瓶子
    java实现第七届蓝桥杯寒假作业
    Ubuntu 美团sql优化工具SQLAdvisor的安装(转)
    mapper提示Could not autowire. No beans of … type found?
    aop 中joinpoint的使用方法
  • 原文地址:https://www.cnblogs.com/jiawenxu/p/6822640.html
Copyright © 2020-2023  润新知