首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java-面向对象(继承)

Java-面向对象(继承)

作者头像
DataScience
发布2020-05-07 18:20:15
3630
发布2020-05-07 18:20:15
举报
文章被收录于专栏:A2DataA2Data

4、面向对象 (继承、多态)

4.1、static静态

static(静态) 关键字 用于修饰成员变量和成员方法 特点:

  • 被所有的对象所共享
  • 可以使用类名调用
  • 静态加载优先于对象
  • 随着类的加载而加载

注意事项:

  • 静态方法只能访问静态成员
  • 非静态方法既可以访问静态也可以访问非静态
  • 非静态方法中不可以定义静态变量
  • 静态方法中不可以定义this,super关键字

优缺点:

  • 优点
    • 对对象的共享数据提供单独的存储空间,节省空间
    • 直接被类名调用,不用在堆内存创建对象
  • 缺点
    • 访问出现局限性(只能访问静态)
package one;

/**
 * Created by JackFeng on 2020/3/8.
 */

public class StaticDemo {
    public static void main(String[] args) {

        /*
        * Math 主要的数学运算方法
        * */

//        static double abs ( double a) : 返回绝对值
        System.out.println(Math.abs(15));
        System.out.println(Math.abs(-10));
        System.out.println("----------");

        // ceil  天花板 向上取整
        System.out.println(Math.ceil(1.2));
        System.out.println(Math.ceil(1.6));
        System.out.println("----------");

        // floor 向下取整
        System.out.println(Math.floor(1.2));
        System.out.println(Math.floor(1.8));
        System.out.println("==========");


        // round 四舍五入
        System.out.println(Math.round(1.2));
        System.out.println(Math.round(1.6));
        System.out.println("---------");


        // max  min
        System.out.println(Math.max(3,8));

        // pow 次幂  第一个参数的第二个参数次幂

        System.out.println("2 的3 次方");
        System.out.println(Math.pow(2,3));

        // random 随机数  大于0 <1
        System.out.println(Math.random());
        

    }
}

4.2、代码块

写一个数据操作的工具类,取最大值,已经取数组中指定索引的值

MyArray 工具类

package com.a2data;

/**
 * Created by JackFeng on 2020/3/13.
 */
public class MyArrays {
    // 数组操作 有关的工具类 ,不需要创建对象,所以 可以私有他的构造方法

    private MyArrays(){}


    // 取最大值

    public static  int getMax(int[] arr){

        // 定义参照物
        int max = arr[0];
        for (int i = 1; i <arr.length ; i++) {

            if (max<arr[i]){
                // 替换参照物
                max = arr[i];
            }
        }
        return max;
    }

    // 获取指定数组中指定元素的索引位置

    public static int getIndex(int[] arr,int a){

        for (int i = 0; i <arr.length ; i++) {
            if (arr[i]== a)
                return i;
        }
        return -1;
    }


}

MyArrayDemo 工具类使用

package com.a2data;

/**
 * Created by JackFeng on 2020/3/13.
 */
public class MyArrayDemo {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5, 21};

        int max = MyArrays.getMax(arr);

        System.out.println(max);

        int index = MyArrays.getIndex(arr, 3);
        int index1 = MyArrays.getIndex(arr, 6);
        System.out.println(index);
        System.out.println(index1);
    }
}

局部代码块: 存在于方法中,控制变量的生命周期(作用域) 构造代码块: 去构造方法中的共性,每次创建对象都会执行,并且在构造方法执行之前执行。 静态代码块: 随着类的加载而加载,只加载一次,加载类时需要加载的驱动

4.3、继承

继承:Extends 多个类有共同的成员变量和成员方法,抽取到另外一个类中(父类) 只能继承一个父类。 --- 只有一个亲爹 只能继承父类非私有成员 支持多层继承 --- 还可以有一个亲爷爷

superthis相似,获取父类的成员和方法。就近原则!

方法重写: 在子父类当中,子类的方法和父类的方法完全一样,子类重写了父类的方法(覆盖)。并且super 调用父类的方法即可。

注意事项:

  • 不能重写父类私有的方法
  • 必须大于等于父类方法的权限

注解:@

  • @Override

继承中构造方法的执行顺序: 子父类继承关系

  • 创建了子类的对象,就会调用子类的构造方法
  • 子类构造方法第一行没有调用父类构造方法,默认调用父类无参构造
  • 肯定先执行父类方法,因为要先给父类的成员变量进行初始化,子类可能会用到。

super() 在子类构造方法的第一行中调用父类的构造方法 继承优缺点 优点:

  • 提高代码的复用性,可维护性

缺点:

  • 耦合性的影响。

开发原则:高内聚低耦合

  • 内聚:自己完成某件事的能力
  • 耦合:类与类的关系
package com.a2data;

/**
 * Created by JackFeng on 2020/3/13.
 */
public class ExtendsDemo {
    public static void main(String[] args) {
        Zi zi = new Zi();
        zi.function();

    }

  static class Die {
      int num = 11;

      Die(){
          System.out.println("我是父类无参构造");
      }
      public Die(int num){
          System.out.println("我是父类有参构造");
      }

      public void method(){
          System.out.println("我是父类的方法");
      }

  }

  static class Zi extends Die{

      int num = 2020;

      Zi(){
          this(1);  // 第一行不调用子类,或者其他方法,默认调用父类

          System.out.println("我是子类无参构造");
      }
      Zi(int num){
          System.out.println("我是子类有参构造");
      }


      public void  method(){
          System.out.println("我是子类的方法");
      }

      void function(){
//          this.method();

          this.num = 20;
      }

  }

}
this和super的区别
  • this:当前对象的引用
    • 调用子类的成员变量
    • 调用子类的成员方法
    • 在子类的构造方法第一行调用子类其他构造方法
  • super :子类对象的父类引用
    • 调用父类的成员变量
    • 调用父类的成员方法
    • 在子类的构造方法第一行调用父类的构造方法

4.4、匿名对象&final

匿名对象:没有名字的对象 场景: 当方法只是使用一次的时候,可以使用匿名对象 可以当做参数传递,但无法进行操作 注意: 匿名对象可以调用成员对象,并赋值,但是并没有意义,因为只调用一次

package com.a2data;


/**
 * Created by JackFeng on 2020/3/13.
 */
public class AnonyDemo {
    public static void main(String[] args) {

//        Student s = new Student();
//        s.study();

        new Student(); // 匿名对象,没有变量名引用的对象

    }
}

class Student{
    String name;
    int age;

    public void study(){
        System.out.println("加油提升自己");
    }
}
Final

修饰符:可以用于修饰类,成员方法和成员变量

final所修饰的类,不可被继承,不能有子类 final所修饰的方法,不能被重写。 final所修饰的变量,是不可修改的,是常量 常量

  • 字面值常量:1,2,3
  • 自定义常量:被final所修饰的成员变量,一旦初始化则不可改变

注意:

  • 自定义常量必须初始化,可以选择显示初始化或者构造初始化
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-04-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DataScience 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 4、面向对象 (继承、多态)
    • 4.1、static静态
      • 4.2、代码块
        • 4.3、继承
          • this和super的区别
        • 4.4、匿名对象&final
          • Final
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档