Java 基础篇day08

发布时间 2023-11-09 21:20:43作者: 奕帆卷卷

抽象

抽象方法用abstract
抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类
类中该有的成员(成员变量,方法,构造器),抽象类都可以有
抽象类最主要的特点式抽象类不能创建对象,仅作为一种特殊的父亲,让子类继承并且实现
A a = new A() //抽象类不能创建对象
一个类继承抽象类,必须重写完抽象类的全部抽象方法,否则这个类也必须定义称为抽象类

成员内部类
外部类名.内部类名 对象名 = new 外部类().new 内部类();

点击查看代码
 Outter.Inner in = new Outter().new Inner();
        in.setName("张三");
        System.out.println(in.getName());
        in.show();
        System.out.println("------------------------");
        Body.Heart heart = new Body().new Heart();
        heart.show(); 



//外部类
class Outter{
private int age;
public void run(){}
public static String schoolName;
public static void inAddr(){}

//成员内部类:无static修饰,属于外部类的对象的  
public class Inner{
        private  String name;

        public Inner() {
        }

        public Inner(String name) {
            this.name = name;
        }
    public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public void show(){
            // 成员内部类中,是否可以直接访问外部类的实例成员? 可以
            System.out.println(age);
            run();
            // 成员内部类中,是否可以直接访问外部类的静态成员? 可以
            System.out.println(schoolName);
            inAddr();
        }
}

匿名内部类的写法
匿名内部类本质上是一个子类,同时也是一个子类对象
可以更方便的构建一个子类对象
Animal a = new Animal(){
@Override
public void cry() {
System.out.println("猫喵喵喵的叫~~~");
}
};
a.cry();

// 1、返回数组的内容给我们

    int[] arr = {11, 22, 33, 44, 55, 98, 103, 27};
    System.out.println(arr);
    String rs = Arrays.toString(arr);
    System.out.println(rs);

    // 2、拷贝一个数组回来
    // 参数一:原数组  参数二:起始索引  参数三:结束索引 (包前不包后)
    int[] arr2 = Arrays.copyOfRange(arr, 3, 7);
    System.out.println(Arrays.toString(arr2));

    // 3、扩容数组:返回扩容后的新数组
    int[] arr3 = Arrays.copyOf(arr, 20);
    System.out.println(Arrays.toString(arr3));

    // 4、修改数组中的每个数据的。
    double[] scores = {59.5, 90, 60, 89, 29, 0, 100};
    // 参数一:被修改的数组  参数二:用于修改的对象
    Arrays.setAll(scores, new IntToDoubleFunction() {
        @Override
        public double applyAsDouble(int value) {
            // value = 0 1 2 ...
            // 修改数据返回
            return scores[value] + 10;
        }
    });

// 目标:掌握Arrays类为对象数组进行排序的方案。
Student[] students = new Student[6];
students[0] = new Student("张无忌", '男', 28, 178.5);
students[1] = new Student("朱九真", '女', 25, 170.5);
students[2] = new Student("周芷若", '女', 23, 172.5);
students[3] = new Student("赵敏", '女', 27, 169.5);
students[4] = new Student("杨不悔", '女', 39, 165.8);
students[5] = new Student("玄冥二老", '男', 52, 165.3);

    // 重点:Java中如何对自定义类型的对象进行排序呢?? 方式有两种。
    // 第一种:可以让对象的类实现一个比较规则接口Comparable,
    // 从写compareTo方法,制定大小比较规则。
    // Arrays.sort(students);

    // 第二种:sort方法存在一个重载的方法,可以在第二个参数自
    // 带一个Comparator比较器对象,自己设置大小规则。
    Arrays.sort(students, new Comparator<Student>() {
        @Override
        public int compare(Student o1, Student o2) {
            // 制定大小规则:
            // 官方规定了:如果你认为左边对象大,返回正整数。
            // 官方规定了:如果你认为左边对象小,返回负整数。
            // 官方规定了:如果你认为两个对象一样大,返回0。
            // 按照年龄
            // if(o1.getAge() > o2.getAge()){
            // return 1;
            // }else if(o1.getAge() < o2.getAge()){
            // return -1;
            // }
            // return 0;
            // return o1.getAge() - o2.getAge(); // 升序
            // return o2.getAge() - o1.getAge(); // 降序

            // 按照身高排序。
            // if(o1.getHeight() > o2.getHeight()){
            // return 1;
            // }else if(o1.getHeight() < o2.getHeight()) {
            // return -1;
            // }
            // return 0;

            // return Double.compare(o1.getHeight(), o2.getHeight()); // 升序
            return Double.compare(o2.getHeight(), o1.getHeight()); // 降序
        }
    });

    System.out.println(Arrays.toString(students));
}

/**
* this拿到当前学生对象。
* o拿到被比较的学生对象。
*/
@Override
public int compareTo(Student o) {
// 制定大小规则:
// 官方规定了:如果你认为左边对象大,返回正整数。
// 官方规定了:如果你认为左边对象小,返回负整数。
// 官方规定了:如果你认为两个对象一样大,返回0。
// 按照年龄
// if(this.getAge() > o.getAge()){
// return 1;
// }else if(this.getAge() < o.getAge()){
// return -1;
// }
// return 0;
return this.getAge() - o.getAge(); // 升序
}

    System.out.println(Arrays.toString(scores));

    // 5、排序数组。
    Arrays.sort(scores); // 默认升序排序
    System.out.println(Arrays.toString(scores));
}