• 让你看懂dart中静态成员和继承


    静态属性和静态方法

    在dart中,我们可以通过关键字
    static来定义静态属性和静态方法。
    
    需要注意的是:
    静态方法不能访问非静态属性【结论1】
    非静态方法可以访问静态成员【结论2】
    我们通过下面的一段代码来解释【结论1】和【结论2】
    
    访问静态属性或者调用静态方法
    直接通过类来访问
    

    访问静态属性和静态方法

    void main() {
      // 调用静态方法
      PerSonInfo.showInfo();
      // 访问静态属性
      print(PerSonInfo.name);
    }
    
    class PerSonInfo {
      static String name = '张三';
      int age;
      
      static void showInfo() {
         【结论1】
        // 会报错,静态方法中,不能够访问非静态属性
        // print(age);
        print(name);
      }
    
      // 非静态方法中可以访问静态成员【结论2】
      show() {
        print('姓名$name');
        print('年龄$age');
      }
    }
    

    级联操作符 .. 的使用

    void main() {
      var p = new PerSonInfo('张三', 10);
      // p.name = '李四';
      // p.age = 50;
      // p.show();
      
      //等价上面的代码
      p
        ..name = '李四'
        ..age = 50
        ..show();
    }
    
    class PerSonInfo {
      String name;
      int age;
      PerSonInfo(this.name, this.age);
      show() {
        print(this.name);
        print(this.age);
      }
    }
    

    dart中的继承

    我们都知道dart一门面向对象的语言
    那么面向对象的语言中
    有继承、封装、多态、这三个基本特征
    
    继承:
    子类使用extends关键字来继承父类
    子类会继承父类中可见的属性和方法
    但是不会去继承父类中的构造函数
    子类是可以去重写父类中的方法
    
    下面我们写一个Grils类去继承父类PerSonInfo
    虽然Grils类中什么都没没有写
    我们看一下是否可以继承父类中的属性和方法
    
    void main() {
      var g = new Grils();
      g.show();
    }
    
    class PerSonInfo {
      String name='张三';
      int age=10;
      show() {
        print(this.name);
        print(this.age);
      }
    }
    class Grils extends PerSonInfo {}
    
    

    继承时需要注意的点

    class PerSonInfo {
      String name = '张三';
      int age = 10;
      PerSonInfo(this.name,this.age);
      show() {
        print(this.name);
        print(this.age);
      }
    }
    
    //Grils 会报错
    //因为子类是不能够去继承父类中的构造方法的
    class Grils extends PerSonInfo {}
    
    遇见的问题:
    如果我们不要PerSonInfo类的构造函数
    那么这个PerSonInfo类只能够输出一个人的信息
    如何解决了
    

    子类调用父类的构造函数super

    void main() {
      var g = new Grils('李四',30);
      g.show();
    }
    
    class PerSonInfo {
      String name = '张三';
      int age = 10;
      PerSonInfo(this.name,this.age);
      show() {
        print(this.name);
        print(this.age);
      }
    }
    
    class Grils extends PerSonInfo {
      //super我们可以理解为调用父类中的额构造并且赋值 
      Grils(String name, int age) : super(name, age);
    }
    

    子类可以有自己的属性和方法

    void main() {
      var g = new Grils('李四', 30, '女');
      g.show();
      g.say();
    }
    
    class PerSonInfo {
      String name = '张三';
      int age = 10;
      PerSonInfo(this.name, this.age);
      show() {
        print(this.name);
        print(this.age);
      }
    }
    
    class Grils extends PerSonInfo {
      //子类中自己的属性
      String sex;
      Grils(String name, int age, String sex) : super(name, age) {
        this.sex = sex;
      }
      
      //子类中自己的方法
      say() {
        print('你好呀');
      }
    }
    
    

    优先调用子类方法的如果子类没有在去找父类

    void main() {
      var g = new Grils();
      g.say();//输出  你好呀,我是子类
    }
    
    class PerSonInfo {
      say() {
        print('你好呀,我是父类');
      }
    }
    
    class Grils extends PerSonInfo {
      
      say() {
        print('你好呀,我是子类');
      }
    }
    
    

    给命名构造函数传递参数

    void main() {
      var g = new Grils('李四', 30, '女');
      g.show();
      g.say();
    }
    
    class PerSonInfo {
      String name = '张三';
      int age = 10;
      PerSonInfo(this.name, this.age);
      PerSonInfo.mingFun(this.name, this.age);
    
      show() {
        print(this.name);
        print(this.age);
      }
      say() {
        print('你好呀,我是父类');
      }
    }
    
    class Grils extends PerSonInfo {
      String sex;
      Grils(String name, int age, String sex) : super.mingFun(name, age) {
        this.sex = sex;
      }
    
      say() {
        print('你好呀,我是子类');
      }
    }
    

    复写父类中的方法

    在项目的实际开发中
    父类中的方法可能不在适用了
    那么这个时候我们可以重写父类中的方法
    重写父类中的方法可以让代码变得可以扩展
    覆写父类中的方法,不需要添加分号
    @override
    
    void main() {
      var g = new Grils('李四', 30, '女');
      g.say();
    }
    
    class PerSonInfo {
      String name;
      int age;
      PerSonInfo(this.name, this.age);
      say() {
        print('你好呀,我是父类');
      }
    }
    
    class Grils extends PerSonInfo {
      String sex;
      Grils(String name, int age, String sex) : super(name, age) {
        this.sex = sex;
      }
      // 覆写父类中的方法,不需要添加分号
      @override
      say() {
        print('你好呀,我是子类');
      }
    }
    
    作者:流年少年
    出处:https://www.cnblogs.com/ishoulgodo/

    想问问题,打赏了卑微的博主,求求你备注一下的扣扣或者微信;这样我好联系你;(っ•̀ω•́)っ✎⁾⁾!

    如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,或者关注博主,在此感谢!

    万水千山总是情,打赏5毛买辣条行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主(っ•̀ω•́)っ✎⁾⁾!

    想问问题,打赏了卑微的博主,求求你备注一下的扣扣或者微信;这样我好联系你;(っ•̀ω•́)っ✎⁾⁾!

    支付宝
    微信
    本文版权归作者所有,欢迎转载,未经作者同意须保留此段声明,在文章页面明显位置给出原文连接
    如果文中有什么错误,欢迎指出。以免更多的人被误导。
  • 相关阅读:
    Neutron介绍
    docker下jenkins环境搭建
    OpenStack allinone环境搭建
    go中channel的部分理解
    总结一下我的面试经历
    MYSQL基础总结(1)
    struts2中判断数组的长度
    antd组件Checkbox
    React使用antd组件Radio
    React使用Echarts
  • 原文地址:https://www.cnblogs.com/ishoulgodo/p/15087254.html
Copyright © 2020-2023  润新知