Bigdata Development Java_Study_03(继承中关键字,抽象类)

来源:互联网 发布:excel将数据分成多列 编辑:程序博客网 时间:2024/05/19 07:29

这里写图片描述

继承中的关键字

/*修饰词,设置属性和方法的使用范围。public 在整个项目中都可以使用。protected 只能在当前包内使用。private 只能在当前类中使用,子类继承不到。只有public才能修饰类,一个.java文件中可以定义多个类,只有一个类使用public修饰并且这个类和.java的文件名必须保持一致。实际开放中不推荐在一个.java中写多个类。final修饰的变量,值不能发生变化,叫做常量。修饰的方法,不能被子类重写。修饰的类,不能被继承。static一个类所有对象,都拥有相同值的属性可以使用static修饰。static静态变量,静态方法。1.这个类所有对象共享这个属性。任意一处修改,都会导致所有对象的这个属性的值发生变化。2.这个属性可以不创建对象,使用类名直接调用,推荐的使用方式。一般static和final配合使用定义常量。常量在开发中非常常用,项目中的一些不会变化的字符串和数字:用户名,提示信息等。都是作为常量定义在单独类中的,使用的时候类名+变量名直接调用。静态方法通过类名调用,没有创建对象。1,不能使用this(当前类对象)和super(父类对象)。2.不能使用当前类的非静态属性和非静态方法(没有用static 修饰的属性和方法)3.可以使用静态属性和静态方法。*/

abstract

/*//  public void cry() {//      //      // 1. 不知都该怎么实现//      // 2. 无论写什么都会被子类覆盖//      // 那就什么也不写//  }    // abstract,抽象    // 如果一个方法只有声明,没有实现,可以使用 abstract 关键词修饰    // 声明就是 {} 前的内容:方法的名字,返回值,参数    // 实现就是 {}:方法要完成的功能,写的代码abstract类不能创建对象,防止去调用抽象方法。抽象方法没有方法体,所以不能new出对象。一旦abstract类的子类重写了所有抽象方法,那么他的子类可以创建对象。否则子类也必须声明为抽象类。抽象类中可以有正常的方法,也可以没有抽象方法,为了不让别人创建这个类的对象,让别人去使用他的子类。但是如果有抽象方法,比如设置为抽象类。***编译时类型:决定了写代码的时候能调用的方法和属性。******运行时类型:软件运行过程中真正创建对象的类型。****/public abstract class Shape {    /**     * 获得当前图形的面积     * @return 图形的面积     */    public abstract double area();}public class Rectangle extends Shape {    /**     * 宽     */    public double w;    /**     * 高     */    public double h;    @Override    public double area() {        return w * h;    }public class Circle extends Shape {    /**     * 圆形的半径     */    public double r;    @Override    public double area() {        return Math.PI * r * r;    }}public class Cloth {    /**     * 计算三个图形的面积和     * @param s1 图形1     * @param s2 图形2     * @param s3 图形3     */    public void sumShapeArea(Shape s1, Shape s2, Shape s3) {        double area = s1.area() + s2.area() + s3.area();        System.out.println("总面积是:" + area);    }    // 参数个数不确定:两种解决方案    // 1. 参数设置为 数组,一个数组对象代替多个对象    // 一袋苹果 = 10 个苹果,一个 Shape[] = 多个 Shape 对象    public void sumClothArea(Shape[] shapes) {        double area = 0;        for (Shape shape : shapes) {            // 遍历数组取出每一个图形,面积进行累加            area += shape.area();        }        System.out.println("总面积是:" + area);    }    // 2. 使用可变长参数,调用方法的时候可以传入任意个相同类型的参数    // 本质还是把参数放入到 shapes 数组中,传递到方法内    public void sumClothArea2(Shape ...shapes) {        // shapes 是一个数组,存放了任意个 Shape 对象        double area = 0;        for (Shape shape : shapes) {            // 遍历数组取出每一个图形,面积进行累加            area += shape.area();        }        System.out.println("总面积是:" + area);    }}public class Demo {    public static void main(String[] args) {        /*         * 衣服,三角形,圆形,长方形         *          * 衣服:         *      方法:         *          计算任意个图形的面积         *          (一个类型需要同时表示 三角形,圆形,长方形 三种类型)         *          (父类和子类的关系,一个父类类型可以表示所有的子类类型)         *          (为三个图形增加一个父类 Shape,使用 Shape 作为方法的参数类型)         *          (编译类型为父类类型,决定了参数只能调用父类的方法)         *          (去 Shape 类中增加 area 方法,计算图形的面积)         *          (area 方法无法实现,所以定义为 abstract)         *          (Shape 也需要设置为 abstract)         *          * 圆形类继承自 Shape         *          (Shape 是 abstract,需要实现 abstract 方法 area)         *          (area 计算圆形的面积,需要知道圆的半径 r)         *          (r 不能是固定的值,只能设置为变量,两种方式,参数和属性)         *          (area 是重写父类的方法,要保持完全一致,参数方案不能使用)         *          (增加属性 r,area 方法中使用属性 r 计算面积)         *          * 长方形参考圆形类继承自 Shape         *          (重写抽象 area 方法,增加 w 和 h 属性,计算面积)         *          */        Cloth cloth = new Cloth();        Circle c1 = new Circle();        c1.r = 2;        Circle c2 = new Circle();        c2.r = 3;        Rectangle r1 = new Rectangle();        r1.w = 3;        r1.h = 5;        Rectangle r2 = new Rectangle();        r2.w = 2;        r2.h = 6;        cloth.sumShapeArea(c1, c2, r2);        cloth.sumShapeArea(c2, r1, r2);        // 使用数组的方式传递参数        Shape[] s1 = {r1, c1}; // 数组的静态初始化,创建数组的时候为数组内容赋值        Shape[] s2 = {r1, c1, r2, c2};        cloth.sumClothArea(s1);        cloth.sumClothArea(s2);        // 可变长参数方法的调用和传参,多个之间以 , 分隔,没有个数限制        cloth.sumClothArea2(c1, c2, r1);        cloth.sumClothArea2(r2);        cloth.sumClothArea2(c2, r2);    }}
原创粉丝点击