Math类、ArrayList类、继承: extends、抽象abstract

一。Math:

Scanner con=new Scanner(System.in);
        double m=con.nextDouble();
        double n=con.nextInt();

        System.out.println("随机0.0~1.0"+"\t"+Math.random());
        System.out.println("绝对值"+Math.abs(m));
        System.out.println("向上取整"+Math.ceil(m));
        System.out.println("向下取整"+Math.floor(m));
        System.out.println("四舍五入"+Math.round(m));
        System.out.println("开方"+Math.sqrt(m));
        System.out.println("指数"+Math.pow(m,n));

二。ArrayList-类:用来存储数据, 可变长数组 -> 集合,可以实现数组长度动态变化,所属软件包: java.util,ArrayList 仅支持引用类型
1.构造方法:

 ArrayList < >  arrList = new ArrayList<E>()

《E》: 泛型, 可以所有的引用类型, 规定集合中元素类型

         基本数据类型都有对应的引用类型
         int -> Integer
         char -> Character
         byte -> Byte
         boolean -> Boolean
         double -> Double
String[] a={"p","k"};
        ArrayList <String> list = new ArrayList();//< >泛型:规定集合中元素的类型
        list.add("kjsd");//从数组中加元素
        list.add("qwe");
        list.add("uiui");
        list.add("gdfg");
        list.add(list.get(1));
        list.add(a[0]);
        System.out.println(list);
        list.remove(2);//从数组中删元素,参数为下标
        System.out.println(list);
        //  list.size()获得list长度
        String m= list.get(2);//从集合中获取list下标为2的元素
        System.out.println("获得"+m);
        for(int i=0;i<list.size();i++){
            System.out.println(list.get(i));

三。继承: extends
1.概念:子类/衍生类/扩展类: Dog
父类/基类: Animal
2.子类继承父类, 就继承了父类所有的成员变量和方法
3.所有的类, 都有唯一的父类,
如果没有写父类, 说明父类就是 Object
4.子类中还可以定义自己的独特的成员变量和方法
子类的功能一定比父类要强大

特殊情况:
1.子类中的成员变量和父类同名 name
Dog d = new Dog();
d.name -> 就是指自己定义的name,不是继承过来的name
结论: 父子类中的成员变量不要同名
2.子类中可以引用父类对象
super
3.创建子类对象之前, 会先创建父类对象,
加载子类之前, 会先加载父类
4.构造方法: 父类的构造方法不能被子类继承的
创建子类对象, 会先默认调用父类的无参构造器
原因: 子类构造方法中, 第一行默认 super()
可以手动调用父类其他构造方法
结论: 子类构造方法中, 一定会先调用父类的构造方法
父类中, 建议先写无参构造器
5.通过子类对象调用方法时
先看子类中有没有定义这个方法, 定义了, 调用子类方法
子类中没有这个方法, 调用父类继承的方法

public class Animal extends Object {
    String name;
    char sex;
    int age;
    Animal() {
        sex = '男';
        System.out.println("Animal空参构造器");
    }
    Animal(String name) {
        this.name = name;
        System.out.println("Animal有参构造器");
    }
    void eat() {
        System.out.println(this.name + "在吃好吃的!");
    }
}
/**
 * 小狗类 继承了 动物类
 * 1.概念:子类/衍生类/扩展类: Dog  父类/基类: Animal
 * 2.子类继承父类, 就继承了父类所有的成员变量和方法
 * 3.所有的类, 都有唯一的父类, 如果没有写父类, 说明父类就是:Object
 * 4.子类中还可以定义自己的独特的成员变量和方法
 *   子类的功能一定比父类要强大
 */
public class Dog extends Animal {
    String name;
    Dog() {
        // 调用父类有参构造方法
        super("");
        System.out.println("Dog空参构造器");
    }
    Dog(String name) {
        super(); // 默认调用父类无参构造方法
        super.name = name;
        this.name = "小强";
        System.out.println("Dog有参构造器");
    }
    void wang() {
        System.out.println(name + "汪汪!");
    }
    // 重写的父类中的eat
    void eat() {//子类方法重写
        // 子类自己的功能
        System.out.println(this.name + "舔舔小爪子!");
        // 和父类中的eat方法一致
        super.eat();
        // 子类自己的功能
        System.out.println(this.name + "舔舔嘴巴!");
    }
}

public class Demo01Extends {
    public static void main(String[] args) {
        Dog d = new Dog("旺财");
        // name是在父类中声明的, 子类可以直接使用
        System.out.println(d.name);
//        d.name = "旺财";
        d.eat(); // 子类方法
//        d.wang();
    }
}

在这里插入图片描述

四。修饰词abstract 抽象的
抽象方法: 方法没有方法体
一个类中, 存在抽象方法, 那么这个类就必须也是abstract
抽象类: 用abstract修饰的类
抽象类不能直接new对象
有构造方法, 为了给子类使用
抽象类的非抽象子类, 必须实现/重写抽象类的所有抽象方法
判断:
1.有抽象方法的类叫抽象类 √
2.抽象类就是有抽象方法的类 ×
3.抽象类中可以没有抽象方法 √

public abstract class Flyobject {//抽象类
    //抽象类中,不一定包含抽象方法,但是有抽象方法的类必定是抽象类
    int x;
    int y;
    //抽象类中可以有构造方法,以供子类创建对象时初始化使用
    Flyobject(){
    }
    abstract void move();//为了让所有子类统一,父类方法体没有意义,不写。--抽象方法
}

public  class Hero extends Flyobject {
    void move(){//此时的方法重写是子类对父类抽象方法完成实现,也叫实现方法
        System.out.println("英雄飞机在发射子弹");
        //继承抽象类的子类要重写抽象方法。否则,该子类也必须声明为抽象类
    }
}
public class Main {
    public  static void main(String [] ages){
        //抽象类不可以创建对象,只有其非抽象子类可以创建对象
        Fly a=new Fly();
        a.move();
        Hero b=new Hero();
        b.move();
    }
}

首先,需要创建一个包含多个三角形、矩形、圆形对象的列表。可以使用ArrayList来实现。 然后,可以编写一个比较器来比较对象的面积大小,用于排序。比较器需要实现Comparator接口,并重写compare方法。 最后,在测试中调用Collections.sort方法,将对象列表按照面积大小进行排序,并遍历输出。 以下是示例代码: 抽象类: ``` public abstract class Shape { public abstract double getArea(); public abstract double getPerimeter(); } ``` 三角形: ``` public class Triangle extends Shape { private double a; private double b; private double c; public Triangle(double a, double b, double c) { this.a = a; this.b = b; this.c = c; } @Override public double getArea() { double p = (a + b + c) / 2; return Math.sqrt(p * (p - a) * (p - b) * (p - c)); } @Override public double getPerimeter() { return a + b + c; } } ``` 矩形: ``` public class Rectangle extends Shape { private double length; private double width; public Rectangle(double length, double width) { this.length = length; this.width = width; } @Override public double getArea() { return length * width; } @Override public double getPerimeter() { return 2 * (length + width); } } ``` 圆形: ``` public class Circle extends Shape { private double radius; public Circle(double radius) { this.radius = radius; } @Override public double getArea() { return Math.PI * radius * radius; } @Override public double getPerimeter() { return 2 * Math.PI * radius; } } ``` 比较器: ``` public class ShapeComparator implements Comparator<Shape> { @Override public int compare(Shape s1, Shape s2) { double area1 = s1.getArea(); double area2 = s2.getArea(); if (area1 < area2) { return -1; } else if (area1 > area2) { return 1; } else { return 0; } } } ``` 测试: ``` import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Test { public static void main(String[] args) { List<Shape> shapes = new ArrayList<>(); shapes.add(new Triangle(3, 4, 5)); shapes.add(new Rectangle(4, 5)); shapes.add(new Circle(2)); shapes.add(new Triangle(5, 12, 13)); shapes.add(new Rectangle(3, 6)); shapes.add(new Circle(3)); Collections.sort(shapes, new ShapeComparator()); for (Shape shape : shapes) { System.out.println("面积:" + shape.getArea() + ",周长:" + shape.getPerimeter()); } } } ``` 输出: ``` 面积:6.283185307179586,周长:12.566370614359172 面积:12.0,周长:18.0 面积:28.274333882308138,周长:12.566370614359172 面积:30.0,周长:30.0 面积:54.0,周长:18.0 面积:78.53981633974483,周长:18.84955592153876 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值